2012-08-13 65 views
0

我想nginx的設置適當的接受語言頭取決於請求的域:映射接受語言頭與nginx的(和django的)結構域

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

www.domain.eu不做任何事情讓Django從瀏覽器中獲取標題。 如果英文用戶輸入www.domain.ru(強制使用俄語),則對於上面指定的3個域名,強制更改接受語言標題,即使是 。

這裏是我的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

嘗試

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會贏,但爲什麼玩火?

+0

在我的位置/指令中添加'proxy_set_header Accept-Language $ language;'+您的代碼有幫助。謝謝! – Robert 2012-08-14 06:54:31