安小琪's blog

少年有梦,不应止于心动

nginx配置ssl证书

本来想着将博客从github迁移到云服务器之后,访问速度能够快一点的,但是发现实际访问还是很慢。这是因为google浏览器会强制转换为https协议,意思就是说需要配置ssl证书啦

免费ssl证书获取

在这里可以获得免费的ssl证书,使用期限一年

点击【立即购买】即可免费获得20张证书

购买之后,点击【创建证书】,就会生成下面框中的内容

点击【证书申请】

点击【下一步】。这里会自动添加DNS解析,我们直接点【验证】,提交即可

过了一会就会发现申请通过,就像这样

我们点击下载,选择nginx

Nginx上的配置

nginx的相关配置一般都在/etc/nginx/目录,因为nginx版本的不同,该目录中的内容一般都会不同,该目录在我机子上的内容如下所示:

nginx.conf是最最最重要的配置文件,其中nginx.conf文件又会把conf.d/目录中.conf文件内容和sites-enabled/目录中的文件内容直接include进来,include语句主要是这几句:

1
2
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

下面介绍一下我机子上nginx.conf文件的内容,主要是一些基础配置。我们可以看到最后两行include的内容,就是上面的内容。个人建议把一些站点的配置都放到./sites-enabled/或者./conf.d目录中,方便日后管理(增删只有删除相应文件即可)。

接下来开始正式配置。为了方便日后SSL证书的管理,我们在etc/nginx目录中创建一个cert目录,然后把下载下来的证书拷贝到/etc/nginx/cert目录中。为了方便,改了下证书名字

之后进入./sites-enabled/目录,创建一个文件为www.npfs06.top(取名为这个,是为了方便管理)

之后把下面的内容复制粘贴到 www.npfs06.top这个文件中

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
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name www.npfs06.top; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/www.npfs06.top.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/www.npfs06.top.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root /var/www/html/npfs06.github.io; #站点目录。
index index.html index.htm;
}
}
server {
listen 80;
server_name www.npfs06.top;
rewrite ^(.*)$ https://www.npfs06.top;
}

同理配置https://npfs06.top,只需要在文件中增加一下内容

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
26
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name npfs06.top; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/www.npfs06.top.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/www.npfs06.top.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root /var/www/html/npfs06.github.io; #站点目录。
index index.html index.htm;
}
}
server {
listen 80;
server_name npfs06.top;
rewrite ^(.*)$ https://npfs06.top;
}

需要注意一下几点:

    • server_name需要配置为你自己的域名;
    • root /var/www/html/npfs06.github.io; 这个是你网站的所在的目录;
    • ssl_certificate cert/www.npfs06.top.pem;pem文件的路径;
    • ssl_certificate_key cert/www.npfs06.top.key;ket文件的路径;

http的重定向

1
2
3
4
5
server {
listen 80;
server_name npfs06.top;
rewrite ^(.*)$ https://npfs06.top;
}

上面代码中的这样部分是为了在使用http访问站点时,能自动跳转到https访问

nginx配置文件配置完成之后需要重启nginx

1
service nginx restart

补充

在重启配置nginx的时候,可以会遇到报错,这是因为在某些细节山有错误,不如说忘记加分号

我们可以通过如下命令查看详细的报错信息

1
nginx -t