用POST重写请求到nginx的GET

我有一个后端服务器,由于各种原因,只处理GET请求。 这个服务器位于nginx代理的后面(即,所有的访问都通过nginx完成,nginx通过proxy_pass代理到后端)。 是否有可能使nginx重写POST请求到GET请求,即使POST /foo身体内容typesapplication/x-www-form-urlencoded和body foo=bar将被代理GET /foo?foo=bar

这个小例子是用nginx-extras(包含lua)在ubuntu 16.04的nginx 1.10.x中为我工作的。 它不尊重来自请求的查询参数,将它们与post主体合并。

 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 } }