ПРОЕКТЫ 


  АРХИВ 


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]

proxy_redirect & $vars


  • To: nginx-ru@xxxxxxxxx
  • Subject: proxy_redirect & $vars
  • From: "Alex L. Demidov" <alexeydemidov@xxxxxxxxx>
  • Date: Tue, 9 Nov 2010 14:42:28 +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:mime-version:content-type:content-disposition :content-transfer-encoding:x-url:user-agent; bh=LH6pup6xJ0ggSbo2bYSrBNp8U3wUoP18q11AnWWEHVg=; b=GXlJjlN0yquKtzlXLaN3woMouI1ooK5YsJFEx+/Z9Rt51QnDoTu7Rxj6gqsFXHuDJq N9GSTXt8KyzKWQLoCYixLn7W6JuZdIbbejo/RDp64I/7exZpVD0qNT9Dr80FUIugB0fn Lz8YkFxTEKo9WCHKCd4ZcFefUWDjSqYhpSGJQ=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:subject:message-id:reply-to:mime-version:content-type :content-disposition:content-transfer-encoding:x-url:user-agent; b=QwkUJrqiCKiQcUkD+LpGKHDdC8i1AU4gyjWKYppH0dLj92GEEAwjMHahLDgudOzGnW RPRWgGuqXBriKJCT6OVM5CeK+dCTlhVmyrL9QMolTlhnoMZe0AhWPeJYjYdA/djSStkt BKeNcrUfoh8QtGcL32DWWZpNrDgb24wiyMBpQ=

Есть 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 в данной ситуации?

Если нагенерировать 64K строчек со всеми портами - не упрусь ли я в
какие-либо ограничения?

Возможно ли отпатчить сам nginx чтобы он понимал $vars в
первом параметре proxy_redirect и нет ли каких-то принципиальных
ограничений для этого? 

Правильно ли я понимаю, что патчить надо функцию
ngx_http_proxy_rewrite_redirect_vars в файле
src/http/modules/ngx_http_proxy_module.c ?

-- 
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.