V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
xiaobo944
V2EX  ›  NGINX

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

  •  
  •   xiaobo944 · 2018-09-04 22:08:59 +08:00 · 10355 次点击
    这是一个创建于 2032 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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?

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

    7 条回复    2018-09-05 14:25:39 +08:00
    ningdb
        1
    ningdb  
       2018-09-04 22:12:49 +08:00 via iPhone   ❤️ 2
    rewrite 去掉
    sjw204
        2
    sjw204  
       2018-09-04 22:44:38 +08:00   ❤️ 3
    301 rewrite 会改变请求 method,把 POST 变成 GET
    可以改变写法,例如使用 return 加 307 状态码,307 不会改变 POST
    详细的可以参考 RFC 文档定义: https://tools.ietf.org/html/rfc7538#page-2
    xiaobo944
        3
    xiaobo944  
    OP
       2018-09-05 00:02:21 +08:00
    @ningdb 好的谢谢 ,技术渣,我还在查哈哈。
    xiaobo944
        4
    xiaobo944  
    OP
       2018-09-05 00:04:59 +08:00
    @sjw204 return 理解了,但是我想实现 请求 www.aaa.com/api 相当于请求了 服务器的 127.0.0.1:5000 该咋弄呢?
    Judoon
        5
    Judoon  
       2018-09-05 00:11:18 +08:00 via Android
    @xiaobo944 rewrite 那一行直接删掉其他不改,应该就 ok 了
    msg7086
        6
    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
        7
    xiaobo944  
    OP
       2018-09-05 14:25:39 +08:00
    谢谢各位!已经解决了,原因有二,第一,传参的时候参数格式不对,第二 5000 端口那边的服务请求结尾必须严格带 /的,一直前端上也没注意,所以忽略了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3237 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:48 · PVG 18:48 · LAX 03:48 · JFK 06:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.