我有两个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配置选项?
2条答案
按热度按时间rjzwgtxy1#
后端返回HTTP 500,然后返回HTTP 301。根据RFC文档,301不要求浏览器在执行重定向时使用相同的HTTP方法。
如果你想强迫浏览器使用同样的方法-你的后端应该用HTTP 307来响应(只有更新的nginX版本才支持)。
有关详细信息-请阅读https://blog.codefarm.me/2021/09/24/http-redirect-3xx/
jtoj6r0c2#
您可能需要与您的网络团队确认相同的请求是否在WAF级别被阻止。一旦WAF阻止了它的重定向,则只会重定向FQDN,并删除所有其他URI部分,然后重定向为GET请求。