Nginx 设置反向代理 post 变成 get 提示 400

2018-09-04 22:08:59 +08:00
 xiaobo944

1.网站 www.xxx.com 放在 Nginx 里跑在 80 端口上;

2.当前服务器 5000 端口上跑着服务,打算在访问 www.aaa.com/apis 的时候 让 Nginx 转发到 127.0.0.1:5000 上进行数据交换;

3.本机有防火墙所以 5000 端口只能用 127.0.0.1:5000 用 Nginx 进行转发。具体配置如下:

location /apis/{ rewrite ^/apis/(.*)$ /$1 break; proxy_set_header Host: www.xxx.com; proxy_method POST; proxy_pass http://127.0.0.1:5000/; }

4.在页面中执行 ajax 请求在开发人员工具 network 中观察到走了两条请求: /apis/get_sowing_area/ /apis/get_sowing_area 一个带 /一个不带,我仔细看了下确定不是 js 的问题。 不带 /的返回 301 MOVED PERMANENTLY 提交方式是 post 带 /的返回 400 BAD REQUEST 不知道为啥成了 get 难道说反向代理仅支持 get 请求? 我本来是 post 提交的等到 Nginx 反向代理的时候就成了 get?

有点搞不懂了,仅仅是反向代理啊 取来了数据按说应该诶啥大问题啊。

10624 次点击
所在节点    NGINX
7 条回复
ningdb
2018-09-04 22:12:49 +08:00
rewrite 去掉
sjw204
2018-09-04 22:44:38 +08:00
301 rewrite 会改变请求 method,把 POST 变成 GET
可以改变写法,例如使用 return 加 307 状态码,307 不会改变 POST
详细的可以参考 RFC 文档定义: https://tools.ietf.org/html/rfc7538#page-2
xiaobo944
2018-09-05 00:02:21 +08:00
@ningdb 好的谢谢 ,技术渣,我还在查哈哈。
xiaobo944
2018-09-05 00:04:59 +08:00
@sjw204 return 理解了,但是我想实现 请求 www.aaa.com/api 相当于请求了 服务器的 127.0.0.1:5000 该咋弄呢?
Judoon
2018-09-05 00:11:18 +08:00
@xiaobo944 rewrite 那一行直接删掉其他不改,应该就 ok 了
msg7086
2018-09-05 04:57:46 +08:00
location /apis/{
proxy_set_header Host www.xxx.com;
proxy_pass http://127.0.0.1:5000;
}
xiaobo944
2018-09-05 14:25:39 +08:00
谢谢各位!已经解决了,原因有二,第一,传参的时候参数格式不对,第二 5000 端口那边的服务请求结尾必须严格带 /的,一直前端上也没注意,所以忽略了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/486173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX