ПРОЕКТЫ 


  АРХИВ 


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]

Как обойтись без rewrite в location-е с regexp-ом?


  • To: nginx-ru@xxxxxxxxx
  • Subject: Как обойтись без rewrite в location-е с regexp-ом?
  • From: Михаил Монашёв <postmaster@xxxxxxxxxxxxx>
  • Date: Sat, 2 Feb 2013 23:18:36 +0400
  • Dkim-signature: v=1; a=rsa-sha1; c=relaxed; d=softsearch.ru; h=date:from :reply-to:message-id:to:subject:mime-version:content-type :content-transfer-encoding; s=main; i=postmaster@xxxxxxxxxxxxx; bh=4WXpiaJIR/WxqTLOXg9T3xP+CYA=; b=XEifWQFuXovvQs7EvLG607SkJf+U s+d+z/CjFfBil9PATHz3T+pM8sLPQ6TKmfQXJuDQ9L+6pU41ZRTwIpFWPjiBZ4wL oN7b1JUJ/LZrIr3PA1kpzgjACQ9HwaRwL0e6ENxeXWSxeGhKwKoOuVa5uK/+DJSi rDZhQ+Onr7lxGlo=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=softsearch.ru; h=date:from :reply-to:message-id:to:subject:mime-version:content-type :content-transfer-encoding; q=dns; s=main; b=hIRnKWjDFMBUqzk8kPT zcDd3bQgLhDi7wQgMjZYj8QvYGzX/OiTf6jYoMj5HxgSfnOnrHKT87YPzgZPGebW jxfqv1+jmHA0/5BoaZ29K641qrDBzNBRS2HhRZxRupN5cRTlNKQs63zBaZhFyv0c Hbpw2eHdxMnZrkK6i0tKxAVY=

Здравствуйте.

Задача простая: выделить из location-а, заданного регэкспом, часть и её
использовать в proxy_pass. В голову приходит вот такой конфиг:

location ~ ^/dir(?<ruri>/.+)$ {
     proxy_pass http://1.2.3.4:80$ruri;
}

Но проксируется не $ruri , а исходный запрос, начинающийся на /dir.
Что соответствует документации:
>  В ряде случаев часть URI запроса, подлежащую замене, выделить невозможно:
> 
>     Если location задан регулярным выражением.
> 
>     В этом случае директиву следует указывать без URI.
>
>     Если внутри проксируемого location с помощью директивы rewrite изменяется 
> URI, и именно с этой конфигурацией будет обрабатываться запрос (break):
> 
>         location /name/ {
>             rewrite    /name/([^/]+) /users?name=$1 break;
>             proxy_pass http://127.0.0.1;
>         }
> 
>     В этом случае URI, указанный в директиве, игнорируется, и на сервер 
> передаётся изменённый URI запроса целиком.

Т.е. выходит, что нужен второй регэксп, который изменил бы $uri.

А  можно  без него обойтись? Т.е. не игнорировать заданный в директиве
uri,  а  использовать именно его. Его ведь для того и указывают, чтобы
использовать,   а   не   игнорировать.  Тогда  в  локейшнах,  заданных
регэкспами,  можно  будет отказаться rewrite и сэкономить процессор на
запуске ещё одного регэкспа.

-- 
С уважением,
 Михаил                          mailto:postmaster@xxxxxxxxxxxxx

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


 




Copyright © Lexa Software, 1996-2009.