после rewrite опять перечитываем locations?

Maxim Dounin mdounin at mdounin.ru
Thu Apr 9 13:31:54 MSD 2009


Hello!

On Thu, Apr 09, 2009 at 11:58:20AM +0300, Goncharov Yuri wrote:

> Здравствуйте, подскажите пожалуйста, как реализовать нижеописанное.
> apache-mod_php + nginx
>
> Есть старый сайт http://domain.com/old/
> Есть новый сайт http://domain.com/
>
> Для каждого из версий свой бекенд.
> Но перед тем как проксировать на бекенд нужно убирать /old/
>
> Получается если делать
>
> location ~* /
> {
> proxy_pass http://backend1
> }
>
> location ~* /old/
> {
> rewrite ^/old/(.*) /$1 last

В общем случае:

- rewrite ^/old/(.*) /$1 last
+ rewrite ^/old/(.*) /$1 break;

В данном конкретном вам нужно вместо всего этого написать:

    location / {
        proxy_pass http://backend1;
    }
    location /old/ {
        proxy_pass http://backend2/;
    }

Не надо использовать regex location'ы там, где они не нужны.  В 
частности, от этого появляется возможность использовать proxy_pass 
c uri, что существенно упрощает подобные задачи.

> proxy_pass http://backend2
> }
>
> То после того как отработает rewrite - обработка идёт опять по 1-му location
>
> Как быть?

Maxim Dounin





More information about the nginx-ru mailing list