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
|