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没有问题,搞定。

引用

  • ngxin做http强制跳转https,接口的POST请求变成了GET

你可能感兴趣的:(nginx http强转https)