ПРОЕКТЫ 


  АРХИВ 


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: отменить брейком в if, описанный в location - proxy_pass



On Thu, Jun 12, 2008 at 04:20:22PM +0300, test157@xxxxxxxx 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@xxxxxxxx пишет:
> >> Доброго времени суток!
> >>
> >> интересует такой вопрос. возможно ли сделать таким образом - что
> >> вложенный в локейшен 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@xxxxxxxx
> 

-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.