Nginx设置HTTPS访问

背景介绍

博客完成云服务器部署后,可以正常访问,但浏览器会提醒不安全,且容易被聊天软件阻止访问,因此进行https设置。

服务器提供商:腾讯云

操作系统:Centos 7.6 64bit

域名:已在腾讯云购买域名并同时申请了SSL证书,一年免费

Web服务器:Nginx

获取证书

1)在腾讯云证书管理处根据Web服务器下载相应的证书。

1-证书下载

2)下载后得到包含证书的压缩包,解压缩得到证书文件。

2-解压缩得到证书文件

上传至服务器

在服务器上创建文件夹,用于存放证书,并将解压得到的证书上传至该文件夹。

我的Nginx安装路径为:/etc/nginx,所以就在该目录下创建了/SSL文件夹并将证书上传至该文件夹。

3-创建证书文件夹

配置Nginx

打开Nginx的配置文件,我的为:/etc/nginx/nginx.conf,不清楚自己的在哪里,可以通过nginx -t命令进行查询

http{ }代码段中已有一段server{ }代码段

server { … listen 80; … }代码段是对80端口进行的相关设置,浏览器默认的访问请求方式http就是通过80端口访问网站的。

https方式通过443端口进行访问,因此再添加一段针对443端口的设置即可

http{ }代码段中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Settings for a SSL enabled server.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tianbiao.top www.tianbiao.top; # 此处填写自己的域名
root /home/hexoBlog; # 此处填写要展示的网站的根目录

ssl_certificate "/etc/nginx/SSL/tianbiao.top_bundle.crt"; # 此处填写.crt证书文件的路径
ssl_certificate_key "/etc/nginx/SSL/tianbiao.top.key"; # 此处填写.key证书文件的路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

完成上述设置后,当通过https://你的域名:443访问网站时,会显示站点安全。

HTTP 自动跳转到 HTTPS

通常访客直接通过域名访问,浏览器默认该方式为http请求,因此需要实现自动将http请求重定向至https请求的功能,继续添加代码段如下:

1
2
3
4
5
6
   # 前面添加的 server { lister 443 ...} 代码段
server {
listen 80;
server_name tianbiao.top www.tianbiao.top; # 此处填写自己的域名
rewrite ^(.*) https://$host$1 permanent;
}

此时Nginx服务器会自动将收到的http请求变为https请求。

重启Nginx服务并尝试访问

上述代码更改完毕并保存后,执行nginx -t可以检查是否有错误,当出现‘...ok、...successful’,表示配置无误,之后重启Nginx服务

1
nginx -s reload

再次尝试域名访问网站,可以看到https访问,不安全提示消失。

4-https访问