Назад | Перейти на главную страницу

Переписать запрос из POST в GET с помощью nginx

У меня есть внутренний сервер, который по разным причинам обрабатывает только запросы 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
    }
}