Мой сайт локализуется с помощью строки в URL-адресе (например, /DE/certificate
получает немецкую версию, /US/certificate
получает en-US
и т. Д.) Для некоторых URL-адресов на сайте пропуская часть локализации перенаправляет в лучшую сторону -гагаю (обычно /US/<url>
), но для других я просто получаю пустую страницу.
Это сайт Django. Django работает через mod_python
на Apache, прослушивая порт 8000. Nginx находится на порту 80. Когда приходит запрос, Nginx проверяет memcached для страницы и, если он находится в кеше, обслуживает непосредственно из кеша. Если memcached отсутствует, Nginx передает запрос обратно в Apache. Django сохраняет вывод большинства GET
запросов в memcached. Трафик на этом сайте очень резкий, и этот метод помогает нам получить максимальную отдачу от относительно маломощного сервера.
Проблема, описанная выше, не присутствует, если я пропускаю Nginx и кеш и отправляю запросы непосредственно в Apache через порт 8000. Это наводит меня на мысль, что проблема в слое Nginx / memcached.
Просмотр журнала Apache об успешном запросе показывает 302, возвращаемых для нелокализованного запроса, и новый запрос для исправленного URL. Просмотр журнала Nginx для неудавшегося запроса показывает ответ 200 и, по-видимому, пустой ответ. Я догадываюсь, что в memcached хранится пустая страница. Есть ли способ исследовать ключи в memcached, чтобы подтвердить эту догадку, или я должен искать какую-то другую информацию для устранения проблемы?
Вот соответствующий раздел конфигурации nginx:
location / {
if ($request_method = POST) {
proxy_pass http://production;
break;
}
default_type "text/html; charset=utf-8";
set $memcached_key "/key-$uri";
memcached_pass localhost:11211;
error_page 404 502 = /django;
}
location = /django {
proxy_pass http://production;
break;
}
Поможет ли мне включить мое промежуточное ПО для кэширования Django? Я настроил это, следуя этой статье в значительной степени точно.