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 请求的参数都不见了
有大神遇见过这种情况么 ?该怎么解决
rerun 307 即可。
小白我一般都是分开 80 和 443 写配置
```
{
listen 80;
server_name *.****;
location / {
return 301 https://*.***$request_uri;
}
}
return 307 就不会改变请求方式。
location /
{
rewrite 80 to 443(if use ssl)
if ( $scheme = http )
{
rewrite ^(.*$) https://$server_name$1 permanent;
}
}
我感觉楼主的意思是用 http 的请求调用 https 的接口,是要 rewrite 不是要 301
rewrite +permanent 在浏览器处理就是 301 他的问题应该是跳转以后 原来的 post 的请求变成了 get。换成 307 状态码即可强制要求不能更改之前的方法。
嗯 , 我在测试环境下,测了一下,改成 return 307 就正常了 ,但总感觉 307 的状态码怪怪的, 现在都是这么做的么
只有我觉得不应该这么写吗?应该 rewrite 到 https 的首页去。
哈哈 307 也是正经的 http 状态码。只是少用而已
我知道是正经的状态码,就是好少看到有人用,感觉怪怪的,有点好奇,其他公司,如果开了
80 强制跳转 443,同时又对 80 端口发起 post 请求,都是用 307 状态码的么
301 是重定向啊
307:对于 POST 请求,表示请求还没有被处理,客户端应该向 Location 里的 URI 重新发起 POST 请求
一般如果旧系统是 http 要转 https 都要使用 307 重定向