ПРОЕКТЫ 


  АРХИВ 


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: proxy pass и urlencode url's



Hello!

On Mon, Oct 08, 2012 at 04:38:24AM -0400, buylov wrote:

> Здравствуйте.
> Есть open proxy на nginx  , имеет следующий вид
> 
> location ~ /proxy/ {
>     resolver 8.8.8.8;
>     rewrite ^/proxy/(.*)$ /$1 break;
>     proxy_pass http://$1;
> }
> При запросах на urlencode url's, в частности содержащие %20, иногда
> возвращается 404 ошибка.
> При тестировании на своей стороне - все в порядке, но при запросе через
> прокси в лог попадает без %20, то есть пишется просто " ". Судя по тексту
> ошибки ,другой сервер воспринимает запрос до первого пробела. Что с этим
> можно сделать?

Если вы указываете proxy_pass с переменными, то правильно 
сформировать URL - это ваша задача.  Поскольку $1 в вашем случае 
не url-encoded - наблюдается то, что наблюдается.

Наиболее правильный путь решения проблемы - не делать так.  Но 
если очень хочется, то можно попробовать воспользоваться одним из 
предложенных ниже вариантов решения:

1) Использовать то, что сформировала директива rewrite, благо она 
должна всё заэкранировать.  Для этого следует в proxy_pass 
указывать *только* имя хоста, и убедится, что использется свежий 
nginx (1.1.12+, если не ошибаюсь).  Конфиг будет какой-то такой:

    rewrite ^/proxy/(?<h>[^/]+)(/.*)$ $2 break;
    proxy_pass http://$h;

2) Брать исходно полученный от клиента $request_uri 
(соотвтетсвенно - url-encoded клиентом) и работать с ним.

    set $d "";
    if ($request_uri ~ "^/proxy/(.*)") {
        set $d $1;
    }

    proxy_pass http://$d;


-- 
Maxim Dounin
http://nginx.com/support.html

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


 




Copyright © Lexa Software, 1996-2009.