proxy_redirect & $vars

Alex Vorona voron на amhost.net
Вт Ноя 9 16:10:24 MSK 2010


09.11.2010 14:37, Maxim Dounin wrote:
> Hello!
>
> On Tue, Nov 09, 2010 at 02:42:28PM +0300, Alex L. Demidov wrote:
>
>> Есть nginx front-end, который слушает на всех хостах вида
>> ^[0-9]+.example.com и делает proxy_pass на 127.0.0.0 и порт
>> соответствующий поддомену example.com, например, при обращении к
>> 12345.example.com идет proxy_pass к 127.0.0.1:12345. На 127.0.0.1
>> могут слушать сотни и тысячи портов, которые на самом деле
>> туннелятся на внешние железки, отвечающие по http, причем эти
>> туннели могут динамически появляться и пропадать.
>>
>> Проблема собственно в том, что одна из этих железок выдает 302
>> Redirect, которые нужно переписать, но proxy_redirect не понимает
>> переменные в первом параметре, как в примере ниже, где
>> закомментировано:
>>
>> -----------------------------------------------------------------------
>>
>> http {
>>      perl_set $decoded_port '...
>>           perl code to extract prefix from Host: header
>>      ...';
>>
>>      server {
>>          listen       80;
>>          server_name  ~^[0-9]+\.example\.com;
>>
>>          location / {
>>              proxy_pass         http://127.0.0.1:$decoded_port;
>>
>> #           proxy_redirect     http://127.0.0.1:$decoded_port/ \
>> #                              http://$decoded_port.example.com/;
>>              proxy_redirect     http://127.0.0.1:12345/          \
>>                                 http://$decoded_port.example.com/;
>>          }
>>      }
>> }
>> -----------------------------------------------------------------------
>>
>> Вопросы:
>>
>> Есть ли какие-либо варианты переписать Redirect в данной ситуации?
>
> Можно ещё попробовать через proxy_hide_header +
> proxy_intercept_errors + error_page 302 + add_header.
>
>> Если нагенерировать 64K строчек со всеми портами - не упрусь ли я в
>> какие-либо ограничения?
>
> Нет, но применение proxy_redirect'ов делается до первого
> совпадения, так что 64k строк - это не очень оптимальное решение.
>
А если генерить server'а с одним нужным proxy_redirect, а не proxy_redirect'ы со всеми 
портами в одном server'е, то должно получиться более оптимально, как я понимаю.



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