Re[2]: отменить брейком в if, описанный в location - proxy_pass

test157 at smail.ee test157 at smail.ee
Fri Jun 13 07:24:21 MSD 2008


Hello Igor,

спасибо за ответ с решением!

за основу его и взял. но появилась новая проблема
обращение к папке по /extpath - без закрывающего слэша, nginx делает редирект
на /extpath/ но сам nginx весит также на локальном ип адресе, т.е.
внешнего ип адреса он как бы и не знает и берет его из поля Host
заголовков как я понимаю, но порт то ему не откуда взять и получается
редирект на правильный внешний ИП адресс, но без порта!

т.е. вся схема выглядит примерно так

EXTERNAL_IP:PORT -> NGINX_IP:PORT -> APACHE_IP:IP_PORT

ип адрес у NGINX и APACHE одинаковый и локальный, разные только порты.
если апач отдает редирект, я могу его исправить - через proxy_redirect.
а как мне указать NGINX какой ИП порт подставлять?

сейчас я решил проблему повесив NGINX на такойже нестандартный порт
как и у внешного EXTARNAL_IP и теперь благодря EXTERNAL_IP из хоста и
и порта из лисена от port_in_redirect on я имею нужный адрес в ответе.
но может это можно както указать также явно, как в proxy_redirect?


Thursday, June 12, 2008, 7:08:01 PM, you wrote:

> On Thu, Jun 12, 2008 at 04:20:22PM +0300, test157 at smail.ee wrote:

>> Hello Alex,
>> 
>> да я практически пришел к томуже, но появилась другая проблема.
>> 
>>     set $root /var/www;
>> 
>>     location / {
>>       proxy_set_header  X-Real-IP  $remote_addr;
>> 
>>       if ($uri ~* \.php$) { 
>>         proxy_pass http://127.0.0.1:81;
>>         break;
>>       }
>>       
>>       if ($uri ~* ^/extpath/.*\.(jpg|gif|png|ico|js|css)$) { 
>>         set $root /home/inroot;
>>         rewrite ^/extpath(/.*\.(jpg|gif|png|ico|js|css))$ $1 break;
>>       }
>> 
>>       root $root;
>>     }
>> 
>> как вы видите, мне нужно переопределять - uri, отнимая от него часть
>> пути - в итоге получается два раза запуск одного и тогоже регуялрного
>> выражения, один раз в ифе другой в реврайте,  а это не очень изящно
>> - изменить $uri через set не выходит ругается про какойто дубликат вот
>> сижу думаю что делать.
>> 
>> и еще одна загвоздка, получается что нужно
>> дублировать каждый раз, /extpath и /extpath/ и так для каждой папки и отдельно в них
>> прописывать proxy_pass - что опять несколько громоздко, дублируются
>> данные. а иначе при открытия индекса, запрос идет на статику а не
>> через пыху.

> Если в if стоит $uri, то это прямой кандидат в location.
> Насколько я вижу достаточно такого конфига:

>      location / {
>          root /var/www;
>      }

>      location /extpath {
>          alias /home/inroot;
>      }

>      location ~* \.php$ {
>          proxy_set_header  X-Real-IP  $remote_addr;
>          proxy_pass http://127.0.0.1:81;
>      }


>> Thursday, June 12, 2008, 3:34:40 PM, you wrote:
>> 
>> > test157 at smail.ee пишет:
>> >> Доброго времени суток!
>> >>
>> >> интересует такой вопрос. возможно ли сделать таким образом - что
>> >> вложенный в локейшен IF в случае совпадения будет заменять
>> >> proxy_pass объявленный в самом location - root'ом. вот пример что есть
>> >> сейчас:
>> >>
>> >>     location /papka/ {
>> >>   
>> > -       if ($uri ~ ^/papka/(.*\.js)$) {
>> > +       location ~ ^/papka/(.*\.js)$ {
>> >>  
>> >>         set $root /home/site/$1;
>> >>         set $t "TEST"; 
>> >>         root $root;
>> >>         break;
>> >>       } 
>> >>       proxy_set_header  X-Real-IP  $remote_addr;
>> >>       proxy_set_header  User-Agent $t;      
>> >>       proxy_pass http://127.0.0.1:80;
>> >>     }
>> >>
>> >> сам заход в ИФ для ЖС файлов работает, но почемуто РУТ не срабатывает,
>> >> а загружается proxy_pass. в целом это логично - с одной стороны, но с
>> >> другой разве BREAK в ифе не должен игнорировать все что ВНЕ ифа?
>> >>
>> >>
>> >>
>> >>   
>> > а если так?
>> 
>> 
>> 
>> -- 
>> Best regards,
>>  test157                            mailto:test157 at smail.ee
>> 




-- 
Best regards,
 test157                            mailto:test157 at smail.ee






More information about the nginx-ru mailing list