Nginx从multipart/formdata中删除内容

cqoc49vn  于 2023-01-25  发布在  Nginx
关注(0)|答案(2)|浏览(164)

我有两个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会从我的请求主体中删除字段。我的请求包含几个文本字段和一个文件。如果我访问HTTPS版本的API url,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配置选项?

rjzwgtxy

rjzwgtxy1#

后端返回HTTP 500,然后返回HTTP 301。根据RFC文档,301不要求浏览器在执行重定向时使用相同的HTTP方法。
如果你想强迫浏览器使用同样的方法-你的后端应该用HTTP 307来响应(只有更新的nginX版本才支持)。
有关详细信息-请阅读https://blog.codefarm.me/2021/09/24/http-redirect-3xx/

jtoj6r0c

jtoj6r0c2#

您可能需要与您的网络团队确认相同的请求是否在WAF级别被阻止。一旦WAF阻止了它的重定向,则只会重定向FQDN,并删除所有其他URI部分,然后重定向为GET请求。

相关问题