Съпоставяне на заглавката на accept-language към домейна с nginx (и django)

Бих искал nginx да зададе подходящ хедър за приемлив език в зависимост от заявения домейн:

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