ПРОЕКТЫ 


  АРХИВ 


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 & $vars


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: proxy_redirect & $vars
  • From: "Alex L. Demidov" <alexeydemidov@xxxxxxxxx>
  • Date: Mon, 15 Nov 2010 15:12:29 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:to:subject :message-id:reply-to:references:mime-version:content-type :content-disposition:content-transfer-encoding:in-reply-to:x-url :user-agent; bh=TTFMdUvc+FAZd02i4YRLc97XyOwZbOduNTJ/x3fwMoE=; b=NzXDrtHmu1Q7oJxUjifua6yuKc/k0R1+py2YqXOoOzI+maPKnbkxrEcqZexmEYSRor +nSxU49equ1w/EMFp2CLUJvlISYzrN0WAy114dfvmxQNHKhjnTWVihzDG+OKSp/gJzQw iZZIXrz5nCWFjtVakJ6a4TSBlr4WEZgiZymss=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:subject:message-id:reply-to:references:mime-version :content-type:content-disposition:content-transfer-encoding :in-reply-to:x-url:user-agent; b=MWwyMM1twFm2fzqDtbSPz4dXEePvjwcWEW9Ec37K3M0focWZrzsrIawOhn90HZLYmk rqR3u4AiqyIYUNg7bo5ZfcDAGxY3nz2ZAYdAlVVDan3ZXe/fYku234xkg6M3qfkaQauZ 9HcuGWUu+bzkZWEZqeD6kaNhZgG59OE9QaAEU=
  • In-reply-to: <20101109123759.GF44164@xxxxxxxxxx>
  • References: <20101109114228.GA17847@xxxxxxxxxxxxxx> <20101109123759.GF44164@xxxxxxxxxx>

On Tue, Nov 09, 2010 at 03:37:59PM +0300, 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.

Спасибо за подсказку, этот вариант совсем не очевиден, тем более в
документации написано что proxy_intercept_errors работает только для
HTTP status >= 400. Еще один недостаток документации - описание
переменных разбросано по разным модулям, поэтому я долго думал, как
достать из встроенного perl'а заголовок Location в ответе, пока не
догадался посмотреть в документацию модуля upstream.

> 
> > Если нагенерировать 64K строчек со всеми портами - не упрусь ли я в
> > какие-либо ограничения?
> 
> Нет, но применение proxy_redirect'ов делается до первого 
> совпадения, так что 64k строк - это не очень оптимальное решение.

Да, по тестам у меня вышло что вариант с intercept втрое быстрее
варианта с 64K proxy_redirect'ов.

-- 
Alex L. Demidov (ALD9-RIPE).
http://alexeydemidov.com/
Freelance Consulting.

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.