请教一个 nginx rewrite 后导致 POST 请求变成 GET 请求的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuedingwangji
V2EX    NGINX

请教一个 nginx rewrite 后导致 POST 请求变成 GET 请求的问题

  •  
  •   yuedingwangji 2018-03-16 09:55:50 +08:00 14298 次点击
    这是一个创建于 2846 天前的主题,其中的信息可能已经有所发展或是发生改变。

    nginx 开了 80 和 443 端口, 对来自 80 端口的请求做强制跳转到 443 端口,代码如下

     location / { # rewrite 80 to 443(if use ssl) if ( $scheme = http ) { rewrite ^(.*) https://$server_name$request_uri? permanent; } } 

    最近这样写存在很大的问题,因为当 nginx 接受 80 接口的 POST 请求的时候,经过 rewrite 会将请求的方法变成 GET,POST 请求的参数都不见了 有大神遇见过这种情况么 ?该怎么解决

    12 条回复    2018-03-16 14:13:55 +08:00
    smileawei
        1
    smileawei  
       2018-03-16 10:05:02 +08:00 via iPhone
    rerun 307 即可。
    kuoruan
        2
    kuoruan  
       2018-03-16 10:05:27 +08:00
    小白我一般都是分开 80 和 443 写配置

    ```
    {
    listen 80;
    server_name *.****;
    location / {
    return 301 https://*.***$request_uri;
    }
    }
    smileawei
        3
    smileawei  
       2018-03-16 10:06:11 +08:00 via iPhone
    return 307 就不会改变请求方式。
    aaronchou0
        4
    aaronchou0  
       2018-03-16 10:22:16 +08:00
    location /
    {
    # rewrite 80 to 443(if use ssl)
    if ( $scheme = http )
    {
    rewrite ^(.*$) https://$server_name$1 permanent;

    }
    }
    m939594960
        5
    m939594960  
       2018-03-16 11:05:09 +08:00
    @smileawei 我感觉楼主的意思是用 http 的请求调用 https 的接口,是要 rewrite 不是要 301
    smileawei
        6
    smileawei  
       2018-03-16 11:23:13 +08:00
    @m939594960 rewrite +permanent 在浏览器处理就是 301 他的问题应该是跳转以后 原来的 post 的请求变成了 get。换成 307 状态码即可强制要求不能更改之前的方法。
    yuedingwangji
        7
    yuedingwangji  
    OP
       2018-03-16 12:57:34 +08:00
    @smileawei 嗯 , 我在测试环境下,测了一下,改成 return 307 就正常了 ,但总感觉 307 的状态码怪怪的, 现在都是这么做的么
    rrfeng
        8
    rrfeng  
       2018-03-16 13:22:30 +08:00 via Android
    只有我觉得不应该这么写吗?应该 rewrite 到 https 的首页去。
    smileawei
        9
    smileawei  
       2018-03-16 13:25:46 +08:00
    @yuedingwangji 哈哈 307 也是正经的 http 状态码。只是少用而已
    yuedingwangji
        10
    yuedingwangji  
    OP
       2018-03-16 14:11:47 +08:00
    @smileawei 我知道是正经的状态码,就是好少看到有人用,感觉怪怪的,有点好奇,其他公司,如果开了
    80 强制跳转 443,同时又对 80 端口发起 post 请求,都是用 307 状态码的么
    gclove
        11
    gclove  
       2018-03-16 14:13:25 +08:00
    301 是重定向啊

    307:对于 POST 请求,表示请求还没有被处理,客户端应该向 Location 里的 URI 重新发起 POST 请求
    gclove
        12
    gclove  
       2018-03-16 14:13:55 +08:00
    一般如果旧系统是 http 要转 https 都要使用 307 重定向
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2943 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 13:31 PVG 21:31 LAX 05:31 JFK 08:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86