Nginx作为API反向代理无法转发完整请求信息的配置求助
解决Nginx反向代理Node.js API时请求丢失的问题
兄弟,我太懂你这糟心的情况了!把Node.js API用pm2跑起来,再套个Nginx反向代理,本来以为万事大吉,结果所有请求都变成了根路径的GET,各种PUT、DELETE还有参数、请求体全丢了,简直让人头大。
你的基础配置已经有了雏形,但缺了几个关键的代理设置,导致Nginx没把请求的完整信息传递给后端的Node服务。我给你调整一下配置,保证能转发完整的请求方法、URL、参数和请求体:
server { listen 80; listen [::]:80; server_name api-prod.mysite.com www.api-prod.mysite.com localhost; location / { proxy_pass http://127.0.0.1:3111; proxy_redirect off; proxy_buffering off; # 传递原始请求方法给后端 proxy_set_header Request-Method $request_method; # 保留完整的请求URI(路径+查询参数) proxy_set_header Request-URI $request_uri; # 保留原始Host头,避免后端识别错误 proxy_set_header Host $host; # 传递真实客户端IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留请求体的类型和大小,确保后端能正确解析 proxy_set_header Content-Type $content_type; proxy_set_header Content-Length $content_length; # 启用HTTP/1.1,支持PUT/DELETE等方法及请求体转发 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 延长超时时间,避免长请求被提前截断 proxy_read_timeout 300s; proxy_send_timeout 300s; } }
我给你拆解下新增的关键配置:
proxy_set_header Request-Method $request_method:把你前端发的PUT/DELETE/OPTIONS等原封不动传给Node服务,不会默认转成GETproxy_set_header Request-URI $request_uri:保留请求的完整路径和参数,比如/api/user?id=123不会被改成/proxy_http_version 1.1:HTTP/1.0对非GET请求的支持有限,升级到1.1才能稳定处理各种请求方法和请求体Content-Type和Content-Length:确保后端能正确识别请求体的格式(比如JSON、表单)和大小,不会出现解析失败的情况- 超时设置:如果你的API有处理大请求或者耗时操作的情况,避免Nginx提前断开连接,保证请求体完全转发
修改完配置后,记得重启Nginx让配置生效:
sudo nginx -s reload
你可以用curl测试一下,比如发个PUT请求验证:
curl -X PUT http://api-prod.mysite.com/api/test -d '{"name":"test"}' -H "Content-Type: application/json"
这样应该就能解决所有请求变GET、信息丢失的问题了!
内容的提问来源于stack exchange,提问作者lu1her
相关产品推荐
相关产品推荐

