使用nginx(和django)将accept-language标头映射到域

时间:2012-08-13 17:19:50

标签: django internationalization nginx

我希望nginx根据请求的域设置一个合适的接受语言标头:

www.domain.ru set 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/;
}
}

这是我配置的一部分(通过gunicorn运行Django)。 如果未设置会话语言,Django会检查accept-language标头。

1 个答案:

答案 0 :(得分:2)

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会赢,但为什么要玩火?