nginx http强转https
重点记录下,如何在nginx中进行配置,达到http强转https的效果。如何配置https就不在赘述。
网上一搜大部分都是
if ($scheme = http ) {
return 301 https://$host$request_uri;
}
网站访问也是没有问题的,跳转也是ok的。
配置完成之后,测试接口的时候问题就来了,
所有的post请求都会出现问题,打印日志提示:不支持Get方法。
经过排查,在Nginx日志中发现了蹊跷,所有的post请求都被转成了get方法。
通过网上查资料,发现是由于 301引起的。换成307问题解决。
- 301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一 - 307 Temporary Redirect
请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求
从上面我们可以看出,301跳转是永久重定向,而307是临时重定向。这就是301跳转与307跳转两者之间的区别
上面可能看的不是很懂,简单直白的表述一下区别:
307:对于 POST 请求,表示请求还没有被处理,客户端应该向 Location 里的 URI 重新发起 POST 请求
换成 307 状态码即可强制要求不能更改之前的方法。
最终配置
if ($scheme = http ) {
return 307 https://$host$request_uri;
}
测试post没有问题,搞定。
作者:marioplus12
链接:https://www.jianshu.com/p/5cb7e97ecbda
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。