Странность proxy, rewrite, $request_uri

Igor Sysoev is at rambler-co.ru
Sun Jul 29 16:03:21 MSD 2007


On Sun, Jul 29, 2007 at 03:15:32PM +0400, Alexey Rymonin wrote:

> Имею следующее
>         ........
>         location /servlets/ {
>             rewrite  ^(.*)$                   $1?tom_req_uri=$request_uri  break;
> 
>             proxy_pass         http://127.0.0.1:8080;
>             proxy_redirect     off;
> 
>             proxy_set_header   Host             $host;
>             proxy_set_header   X-Real-IP        $remote_addr;
>         }
>         ........
>         rewrite  ^/search/candidate?$  /servlets/Search?file=/search/candidate.htt&action=2&main=100&base=102&hrefname=resume&searchcandidate=true  last;
>         ........
> 
>         следующий запрос
>         http://www.e-prof.ru/search/candidate?seach=true&query=%F2%E5%F1%F2%EE%E2%EE%E5
> 
>         в результате получаю что tom_req_uri = /search/candidate?seach=true
>         именно этому же равняется $request_uri (раз такой результат то
>         это в общем логично)... при этом он подставляет всегда первый
>         параметр из запрос... в примере это был seach=true
> 
>         почему такое происходит и как этого можно избежать?

В моих тестах бэкенду уходит:

/servlets/Search?tom_req_uri=/search/candidate?seach=true&query=%F2%E5%F1%F2%EE%E2%EE%E5&file=/search/candidate.htt&action=2&main=100&base=102&hrefname=resume&searchcandidate=true&seach=true&query=%F2%E5%F1%F2%EE%E2%EE%E5

Касти, я бы сделал

    location = /search/candidate {
        rewrite ...;
    }

И зачем "?" в ^/search/candidate?$ ? Аргументы никогда не проверяются в rewrite.


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





More information about the nginx-ru mailing list