Nginx从multipart/formdata中删除内容



我有两个nodejs应用程序坐在nginx反向代理后面。这是我的nginx配置,

#main_api 
location / {
proxy_pass http://localhost:3000;
}
#chat_api
location /socket.io/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy false;
proxy_pass http://localhost:3001/socket.io/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
....
//ssl stuffs

我可以用JSON发送正常的HTTP请求。但是当我发送multipart/formdata时,nginx从我的请求体中删除字段。我的请求包含几个文本字段和一个文件。如果我访问我的API url的HTTPS版本,只有文件被nginx忽略,但是当HTTP版本被访问时,文本字段也被忽略,我的POST请求被转换为GET请求。

这是我的nginx访问日志,

103.160.233.51 - - [28/May/2022:07:23:51 +0000] "POST /api/files/upload_dp HTTP/1.1" 500 26 "-" "PostmanRuntime/7.29.0"
103.160.233.51 - - [28/May/2022:07:24:04 +0000] "POST /api/files/upload_dp HTTP/1.1" 301 178 "-" "PostmanRuntime/7.29.0"
103.160.233.51 - - [28/May/2022:07:24:04 +0000] "GET /api/files/upload_dp HTTP/1.1" 401 43 "http://myapiurl.com/api/files/upload_dp" "PostmanRuntime/7.29.0"

nginx错误日志为空。

我缺少什么nginx配置选项?

你的后端返回HTTP 500,然后是HTTP 301。根据RFC文档,301在遵循重定向时不要求浏览器使用相同的HTTP方法。

如果你想强制浏览器使用相同的方法-你的后端应该响应HTTP 307(这只支持较新的nginX版本)。

更多信息-阅读https://blog.codefarm.me/2021/09/24/http-redirect-3xx/

您可能需要与您的网络团队检查相同的内容是否在WAF级别被阻止。一旦WAF阻止其重定向FQDN,并删除所有其他URI部分,并作为GET请求重定向。

最新更新