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 请求的参数都不见了 有大神遇见过这种情况么 ?该怎么解决
1
smileawei 2018-03-16 10:05:02 +08:00 via iPhone
rerun 307 即可。
|
2
kuoruan 2018-03-16 10:05:27 +08:00
小白我一般都是分开 80 和 443 写配置
``` { listen 80; server_name *.****; location / { return 301 https://*.***$request_uri; } } |
3
smileawei 2018-03-16 10:06:11 +08:00 via iPhone
return 307 就不会改变请求方式。
|
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; } } |
5
m939594960 2018-03-16 11:05:09 +08:00
@smileawei 我感觉楼主的意思是用 http 的请求调用 https 的接口,是要 rewrite 不是要 301
|
6
smileawei 2018-03-16 11:23:13 +08:00
@m939594960 rewrite +permanent 在浏览器处理就是 301 他的问题应该是跳转以后 原来的 post 的请求变成了 get。换成 307 状态码即可强制要求不能更改之前的方法。
|
7
yuedingwangji OP @smileawei 嗯 , 我在测试环境下,测了一下,改成 return 307 就正常了 ,但总感觉 307 的状态码怪怪的, 现在都是这么做的么
|
8
rrfeng 2018-03-16 13:22:30 +08:00 via Android
只有我觉得不应该这么写吗?应该 rewrite 到 https 的首页去。
|
9
smileawei 2018-03-16 13:25:46 +08:00
@yuedingwangji 哈哈 307 也是正经的 http 状态码。只是少用而已
|
10
yuedingwangji OP @smileawei 我知道是正经的状态码,就是好少看到有人用,感觉怪怪的,有点好奇,其他公司,如果开了
80 强制跳转 443,同时又对 80 端口发起 post 请求,都是用 307 状态码的么 |
11
gclove 2018-03-16 14:13:25 +08:00
301 是重定向啊
307:对于 POST 请求,表示请求还没有被处理,客户端应该向 Location 里的 URI 重新发起 POST 请求 |
12
gclove 2018-03-16 14:13:55 +08:00
一般如果旧系统是 http 要转 https 都要使用 307 重定向
|