[nginx] 给http网站访问加https

只需要给服务器配置SSL证书信息就可以了

1.申请域名SSL证书,方式有很多,本例是再腾讯云申请了一个免费证书。

[nginx] 给http网站访问加https

需要一点时间审核,审核通过之后,下载证书待用

[nginx] 给http网站访问加https

2.去nginx配置文件中加入如下配置,

server {
    listen 443;
        server_name XXXXX.com; #填写绑定证书的域名
        ssl on;
        ssl_certificate /etc/nginx/1_xxxxx.xyz_bundle.crt;
        ssl_certificate_key /etc/nginx/2_xxx.xyz.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;

    }

}

上面的配置弄好之后,重启nginx

service nginx restart

这个时候就可以用https://域名  访问网站了

同时 http://域名 也是可以访问的,因为80端口默认访问http,这个时候如果想要用户访问http时自动跳转到https需要加入如下配置就可以了

再80端口的配置的location /中,加入

rewrite ^(.*)$  https://$host$1 permanent;

[nginx] 给http网站访问加https


这个时候当用户访问http会301重定向到https。

但还有一个问题,就是当用户直接访问ip时,网页会显示证书无效(网站不安全),因为我们的证书不是ip证书

这个时候只需要把80端口的server_name 改成相应的域名

 server_name  xxx.xyz www.xxx.xyz;

[nginx] 给http网站访问加https


另外再添加如下代码

server 

listen 80 default; 
server_name _; 
return 500; 

}

这样这用ip访问网站时,访问500;

[nginx] 给http网站访问加https

也可以让用户ip访问时跳转到相应页面

server 


listen 80 default; 
server_name _; 
rewrite ^(.*) http://www.xxx.xyz  permanent;
}