nginx 反向代理导致 POST 请求正文丢失

2024-01-30

我使用 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 时,请求可以正常代理到服务,但正文为空。当直接发布到服务时,它工作正常。 任何想法有什么问题吗?


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

As per RFC7231 https://www.rfc-editor.org/rfc/rfc7231#section-6.4.2这是一个已知问题,301 和 302 服务器响应通常会导致请求方法的转换,而这些方法不是safe https://www.rfc-editor.org/rfc/rfc7231#section-4.2.1遵循重定向时的 GET 请求。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 反向代理导致 POST 请求正文丢失 的相关文章

随机推荐