首页 > 解决方案 > 使用 nginx 反向代理丢失 POST 请求正文

问题描述

我使用 nginx 作为 http 服务的反向代理,使用如下配置:

location /jobexecutor/ {
        proxy_pass      http://jobexecutor:8080/jobexecutor/;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_redirect      off;
        proxy_connect_timeout   75s;
}

GET 请求被代理到服务很好,但是当我使用 POST 时,请求被代理到服务 OK,但正文是空的。直接发布到服务时,它工作正常。有什么想法有什么问题吗?

标签: nginxnginx-reverse-proxy

解决方案


您找到了解决方法,但我怀疑不是根本原因。

根据RFC7231,一个已知问题是 301 和 302 服务器响应通常会导致请求方法的转换,这些请求方法在跟随重定向时对 GET 请求不安全。

法线proxy_pass对客户端应该是透明的,所以听起来你的 Nginx 配置的其他部分在请求被代理之前首先进行一些客户端重定向。

一旦确定发生这种情况的位置,您可以重新配置 Nginx conf 以消除重定向,或者将 301/302 响应代码分别更改为 307/308,从而在保持原始请求方法的同时进行重定向。


推荐阅读