【问题标题】:Mapping accept-language header to domain with nginx (and django)使用 nginx(和 django)将接受语言标头映射到域
【发布时间】:2012-08-13 17:19:50
【问题描述】:

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

www.domain.ru 设置ru-RU www.domain.com 设置en-US www.domain.de 设置de-DE

www.domain.eu 什么都不做,让 Django 从浏览器获取标题。 对于上面指定的 3 个域,甚至强制更改接受语言标头 如果英文用户输入 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 标头。

【问题讨论】:

    标签: django internationalization nginx


    【解决方案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)。我不确定您的 set 或 nginx 是否会赢,但为什么要玩火呢?

    【讨论】:

    • 在我的location / 指令中添加proxy_set_header Accept-Language $language; + 你的代码有帮助。谢谢!
    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 2012-12-05
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多