nginx强制https访问的三种方法(http跳转到https)

我是配置了xx.ctnmb.com这个子域名用上ssl,但是在根据正常流程虚拟主机中添加好配置文件后,发现直接访问80的xx.ctnmb.com会跳转到default上,而我想的是需要用户只能访问到443,所以在nginx下有这三种方法可以做到。

方法1:rewrite
就是将所有的http请求通过rewrite重写到https上
新建一个虚拟主机的配置文件,是80的配置

1
2
3
4
5
6
server {  
    listen  80;  
    server_name xx.ctnmb.com;  
 
    rewrite ^(.*)$  https://$host$1 permanent;  
}

方法2:nginx的497状态码
当此虚拟主机开启了ssl on;只允许https访问时,当用http访问时nginx会报出497错误码
然后我们再利用497错误的跳转,跳转到443上
对比1和3的优点是不用新建一个80的虚拟主机配置

1
2
3
4
5
6
7
8
9
server {  
    listen       443;  #ssl端口  
    listen       80;   
    server_name  xx.ctnmb.com;  
    ssl on;     
 
    #让http请求重定向到https请求   
    error_page 497  https://$host$uri?$args;  
}

方法3:meta刷新网页
上面的两种方法都会消耗服务器的资源,而这个方法用的是直接网页刷新跳转
新建一个80的配置文件和目录,80的目录内只须存放跳转用的index.html

1
2
3
<html>  
<meta http-equiv="refresh" content="0;url=https://xx.ctnmb.com/">  
</html>

80的配置文件

1
2
3
4
5
6
7
8
9
10
11
server {  
    listen 80;  
    server_name xx.ctnmb.com;  
 
    location / {  
                #index.html放在虚拟主机监听的根目录下  
        root /srv/www/80ctnmb/;  
    }  
        #将404的页面重定向到https的首页  
    error_page  404 https://xx.ctnmb.com/;  
}

添加评论

  1. 阿里云妖梦回复 2018-08-17 10:32

    0.0谢谢接听电话

  2. zzb回复 2018-11-01 02:20

    大爱残天老师