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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить