У меня есть внутренний сервер, который по разным причинам обрабатывает только запросы GET. Этот сервер расположен за прокси-сервером nginx (т.е. весь доступ осуществляется к nginx, который передает его на серверную часть с помощью proxy_pass
). Можно ли заставить nginx переписывать запросы POST в запросы GET, т.е. чтобы POST /foo
с типом содержимого тела application/x-www-form-urlencoded
и тело foo=bar
будет проксироваться на GET /foo?foo=bar
?
Небольшой пример у меня работает с nginx 1.10.x на ubuntu 16.04 с nginx-extras (содержит lua). Он не учитывает аргументы запроса из запроса, чтобы объединить их с телом сообщения.
server {
...
server_name ...;
client_max_body_size 4k; # prevent too long post bodies
location / {
if ($request_method = POST ) {
access_by_lua '
ngx.req.read_body()
local data = ngx.req.get_body_data()
ngx.req.set_uri_args(data)
';
}
proxy_pass http://yourupstreamdestination;
proxy_method GET; # change method
include /etc/nginx/proxy_params.inc; # include some params
}
}