Сопоставление заголовка accept-language с доменом с помощью nginx (и django)

Я бы хотел, чтобы nginx установил соответствующий заголовок accept-language в зависимости от запрошенного домена:

www.domain.ru набор ru-RU www.domain.com набор en-US www.domain.de набор de-DE

www.domain.eu ничего не делает, позволяя Django получить заголовок из браузера. Для 3 указанных выше доменов принудительно изменить заголовок accept-language, даже если английский пользователь вводит www.domain.ru (заставить использовать русский язык).

Вот мой конфиг nginx:

server {
listen 1.1.1.1;
server_name domain.eu www.domain.eu domain.de www.domain.de domain.com www.domain.com domain.ru www.domain.ru;
if($host ~* (.*)\.ru) {
set $http_accept_language 'ru-RU';
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For  $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://127.0.0.1:8888/;
}
}

Это часть моей конфигурации (запуск Django через gunicorn). Django проверяет заголовок accept-language, если язык сеанса не установлен.


person Robert    schedule 13.08.2012    source источник


Ответы (1)


пытаться

if ($host ~* \.ru$) {
  set $language 'ru-RU';
}
add_header Accept-Language $language;

установка переменной с помощью $http_...., вероятно, не лучшая идея, поскольку переменные, начинающиеся с $http_, интерпретируются и устанавливаются самим nginx (в частности, имя, которое вы использовали, будет означать «содержимое заголовка http« accept_language », см. http://wiki.nginx.org/HttpCoreModule#Variables). Я не уверен, выиграет ли ваш набор или nginx, но зачем играть с огнем?

person cobaco    schedule 13.08.2012
comment
Добавление proxy_set_header Accept-Language $language; в мою директиву location / + ваш код помогли. Спасибо! - person Robert; 14.08.2012