Nginx

使用 nginx 將請求從 POST 重寫為 GET

  • April 11, 2022

我有一個後端伺服器,由於各種原因,它只處理 GET 請求。該伺服器位於 nginx 代理後面(即所有訪問都對 nginx 完成,它使用 代理它到後端proxy_pass)。是否可以讓 Nginx 將 POST 請求重寫為 GET 請求,即POST /foo使用正文內容類型application/x-www-form-urlencoded和正文foo=bar將被代理到GET /foo?foo=bar

這個小例子適用於我在 ubuntu 16.04 的 nginx 1.10.x 和 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
   }
}

引用自:https://serverfault.com/questions/721595