ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: proxy_redirect, upstream и оптимальная конфигурация



On Tue, Aug 26, 2008 at 02:08:15PM +0400, Стояновский Анатолий Александрович  
wrote:

> Вопрос наверное сразу к Игорю Сысоеву.
> 
> Есть у меня конфигурация, где директива proxy_redirect не может сделать то,
> что от нее требуется, либо же я не вижу пути решения.
> 
> Есть фронтенд, который обслуживает много сайтов. У каждого сайта есть много
> бакендов, описанных через upstrem. Соответственно, нужно конвертировать
> редиректы бакенда на фронтенд, причем на тот же Host, на который пришел
> пользователь.
> 
> Хочется сделать это одной директивой на уровне http.
> 
> proxy_redirect default в случае групп серверов за имя хоста понимает не
> бакенд, а имя группы. И бог бы с ним, бакенд может возвращать считать имя
> группы за основное имя и делать редиректы туда, то похоже при этом порт
> всегда  равен 80 (и такое значение в переменной $proxy_port). Бакенд же
> висит на другом порту, его номер описан в группе, и переписывания редиректа
> не происходит.
> Пример:
> Upstream backend {
>     server backend1:8000;
> }
> 
> Proxy_pass http://backend;
> 
> Location: http://backend:8000/uri
> не переписывается, т.к. считается, что порт в proxy_pass не равен порту
> настоящего сервера, даром что домены сходятся.

Да, надо будет поправить.

> Но даже если бы default угадывал реальный порт, default использует в
> качестве переписанного имени $server_name, а хотелось бы $http_host, т.к.
> пользователи могут приходить на фронтенд по разным доменам и важно оставлять
> их на том же домене и после редиректа.

server_name_in_redirect  off;

> Поэтому приходится писать в каждом описании сервера
> 
> proxy_redirect http://backend:port http://$http_host:$server_port
> 
> что в принципе работает, но увеличивает количество необходимых
> конфигурационных действий для добавления новых сайтов или координации при
> изменении адреса сайта. Мне кажется, если бы можно было использовать
> переменные в исходной строке, и $proxy_name/$proxy_port указывали на
> реальный бакенд, можно было бы написать
> 
> proxy_redirect http://$proxy_host:$proxy_port http://$http_host:$server_port

Посмотрю, насколько это быстро сделать.


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.