upstream keepalive + Host override : problem?
Maxim Dounin
mdounin at mdounin.ru
Mon Apr 29 10:59:50 UTC 2013
Hello!
On Mon, Apr 29, 2013 at 02:53:19PM +0400, Azarov Alexander wrote:
> Добрый день,
>
> Конфиг у меня выглядит вот так:
>
> upstream playapp {
> server …:9000;
> keepalive 16;
> }
>
> server {
> listen ... ssl;
> server_name …;
>
> proxy_set_header Host $server_name;
>
> location / {
> limit_conn byConn 14;
> limit_req zone=byReq burst=50;
>
> proxy_pass http://playapp;
> proxy_http_version 1.1;
> proxy_set_header Connection "";
> }
> }
>
> Проблема:
>
> 2013/04/29 14:19:02 [debug] 21900#0: *1013606439 http proxy header:
> "GET /pic/2034583 HTTP/1.1
> Host: playapp
> Cache-Control: max-age=0
> Pragma: no-cache
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31
>
> Т.е. на бэкенд уходит "Host: playapp" вместо "Host:
> $server_name". Если убрать proxy_http_version и proxy_set_header
> Connection, все нормализуется, бэкенд видит "Host: $server_name"
http://nginx.org/r/proxy_set_header/ru:
: Директивы наследуются с предыдущего уровня при условии, что на
: данном уровне не описаны свои директивы proxy_set_header.
Т.е. правильно будет написать так:
server {
...
proxy_set_header Host $server_name;
location / {
...
proxy_set_header Host $server_name;
proxy_set_header Connection "";
}
}
или так:
server {
...
proxy_set_header Host $server_name;
proxy_set_header Connection "";
location / {
...
}
}
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru