логика работы Host при проксировании

denis denis at webmaster.spb.ru
Tue Nov 26 11:58:04 UTC 2013


Добрый день.

Не могу понять логику работы с Host. Есть приложение, которое надо 
проксировать на нестандартном порту (пример конфига)

server
{
         listen *:8080;

         server_name aaa.spb.ru;

         include conf.all/tunes-main.conf;

         location / {
                 proxy_redirect off;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for;
                 proxy_set_header Host $host;

                 proxy_pass http://192.168.2.32:8080;
         }
}

При обращении там идут редиректы, при этом Location возвращается без 
указания порта (8080) и поэтому ничего не работает.
При этом установка
proxy_set_header Host aaa.spb.ru:8080;
после блока proxy_set_header также ничего не дает - этот блок вынесен в 
отдельный файл для всех сайтов.

Но стоит убрать строку  proxy_set_header Host $host; - и порт нормально 
появляется в редиректе. В чём логика? Host нельзя переопределить 2 
строкой? или при этом уходит запрос с 2 хостами и система сама выбирает 
что больше нравится? или как? И как тогда правильнее задать в выносном 
блоке, можно ли как Host $host$port? Или просто не добавлять, а для 
секции с изменением порта - задавать Host уже в нужном location?

И попутно мелкий вопросик: была ситуация наоборот, проксируем запрос 
внутрь с 80 порта на 8080, пока явно не прописали Host $host:80; - 
периодически порт 8080 проявлялся в адресной строке. Хотя на десятке 
других серверов такого не было, при том что секция одинаковая.



Подробная информация о списке рассылки nginx-ru