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