Welcome! Log In Create A New Profile

Advanced

Re: proxy pass и urlencode url's

Maxim Dounin
October 08, 2012 06:10AM
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@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Re: proxy pass и urlencode url's

Maxim Dounin October 08, 2012 06:10AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 187
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready