Nginx下SSL强制跳转https的方法(100%可用)

作者: Darren 分类: nginx,收藏 发布时间: 2018-09-26 20:44

我们从阿里云申请了赛门铁克的免费证书对整个网站的数据传输进行了SSL加密。但是普通用户浏览的时候,并不会以https的形式去访问,直接输入网址,访问方式是默认的http(明文传输协议),那么怎么样才能将http访问强制转换为https呢?

基于以上的问题,博主百度了大量的资料,发现网上的方法大致分为三种:一是利用rewrite,将http访问强制重写到https上,二是利用Nginx的状态码,比如497状态码,当用户http访问会报错误码497,Nginx会给出一个497的error page,这时将这个error page重定向到相应的页面即可。三是借鉴百度首页的方式,利用html的metal标签刷新作用,将baidu.com跳转到www.baidu.com,用同样的方式可以将http访问刷新为https。

看很多种方案,也试了很多种方法,但是各种方法适用范围不一样,或者不起效果,或者直接报错,苦恼不已。后来综合了网上的各种方法,采用了301重定向的方法,将http强制改成https,或者将默认访问的80端口(http)重定向到443(https端口),总算是成功了。下面分享一下如何进行301重定向。

准备工具:winscp xshell  你网站的root密码。

依然是修改Nginx中你网站所对应的配置文件,如果你的Nginx挂了一个网站或者没有启用vhost,那么配置文件就是 /usr/local/nginx/conf/nginx.conf,如果你的Nginx挂了多个网站,那么你的配置文件就在/usr/local/nginx/conf/vhost/你的域名.conf

如图,用winscp连上自己的服务器,在 Nginx中你网站配置文件中的server{  }内加入如下代码

if ($scheme = http ) {
        return 301 https://$host$request_uri;
        }

blob.png

 

也可以把代码中的http改成80,改完后保存。

接着在xshell中连上服务器,执行

service nginx restart

重启Nginx,刷新页面即可看到效果。

另外,如果重定向后怎么刷新浏览器都无法访问https网站,请清除浏览器缓存。