我有两个 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 配置选项?
您的后端返回 HTTP 500,然后返回 HTTP 301。根据 RFC 文档,301 并不要求浏览器在执行重定向时使用相同的 HTTP 方法。
如果您想强制浏览器使用相同的方法 - 您的后端应使用 HTTP 307 进行响应(仅较新的 nginX 版本支持)。
欲了解更多信息 - 阅读https://blog.codefarm.me/2021/09/24/http-redirect-3xx/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)