Re: proxy pass и кодирование GET-параметров

Dmitry Volyntsev xeioex на nginx.com
Пт Апр 13 15:24:56 UTC 2018



On 12.04.2018 05:40, gz wrote:
> Добрый день.
> 
> Использую SSI для включения ответа стороннего сервера.
> 
> <!--#include virtual="/include/"-->
> 
> location /include {
> 	internal;
> 
> 	proxy_pass
> http://example.com/endpoint?server=$server_name&uri=$request_uri&ua=$http_user_agent;
> }
> 
> Серверу нужно передать ряд GET-параметров (не заголовков).
> Однако, при передаче того же $http_user_agent сервер отвечает ошибкой 400.
> Судя по всему, параметры, указанные в URI proxy_pass не URI-кодируются.
> 
> Есть ли способы сформировать корректный запрос с произвольными параметрами?

Есть возможность использовать функциональность njs для сериализации 
аргументов запроса.


http://nginx.org/en/docs/http/ngx_http_js_module.html

nginx.conf:

http { 

     	js_include http.njs;
	js_set $encoded_request_uri     encoded_request_uri;
         ...
	<use $encoded_request_uri>
}


http.njs:

function encoded_request_uri(req) {
	return encodeURIComponent(req.variables.request_uri);
}


Однако, в общем случае задача усложняется тем что содержимое 
$request_uri может быть уже url-encoded.





> 
> Posted at Nginx Forum: https://forum.nginx.org/read.php?21,279410,279410#msg-279410
> 
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
> 


Подробная информация о списке рассылки nginx-ru