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
|