这种情况可能是由于 HTTP 版本不一致导致的传输失败。

当 Nginx 作为代理服务器转发 POST 请求时,默认使用 HTTP 1.0 协议与后端服务通信。HTTP 1.0 协议不支持流式传输,需要在请求头中指定 'Content-Length' 字段来标识请求体的大小。

同时,后端服务使用 HTTP 1.1 协议,该协议支持流式传输,不需要 'Content-Length' 字段来标识请求体的大小。

当 Nginx 将包含大于 1MB 的请求体转发给后端服务时,由于 Nginx 使用 HTTP 1.0 协议,会在请求头中加上 'Content-Length' 字段来标识请求体的大小。但是后端服务使用 HTTP 1.1 协议,会忽略 'Content-Length' 字段,而根据请求体实际大小来读取请求。

因此,当请求体大小超过 1MB 时,后端服务实际接收到的请求体大小与 'Content-Length' 字段不一致,从而导致请求失败。

解决这个问题的方法是,将 Nginx 配置中的代理协议版本设置为 HTTP 1.1,即在 Nginx 配置文件中添加以下配置:

proxy_http_version 1.1;

这样配置后,Nginx 将使用 HTTP 1.1 协议与后端服务通信,不再添加 'Content-Length' 字段,从而解决传输失败的问题。

Nginx 代理 POST 请求 HTTP 版本不一致导致传输失败的解决方法

原文地址: https://www.cveoy.top/t/topic/pdSK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录