前提:
购买了腾讯的服务器之后,可以免费领取一个一年的SSL证书,本文主要是获取到证书后部署。
步骤1
首先在这个页面将证书下载下来
我的证书 – SSL 证书 – 控制台 (tencent.com)
因为是要部署到Nginx服务器上,所以在这里我们下载证书的Nginx版本。
我们会一个文件压缩包,压缩包里有四个文件,分别以 csr\key\crt\pem结尾,这里我们只需要关注crt证书文件和key私钥文件拷贝到Nginx服务器的指定目录下。
步骤2
通过scp命令将证书文件传送到服务器上,这里需要将文件上传到服务器Nginx的配置文件ngnix.conf的同级目录下,根据个人安装情况来定,
可以用 nginx -t的命令查看配置文件的位置,结果里的 /etc/nginx/nginx.conf 就是你的配置文件的位置。
root@315cebd73436:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
命令:
示例:scp key文件地址 username@ip:/etc/nginx/
scp D:\xxx\xxx\xxx\xxx.key root@192.168.111.16:/etc/nginx/
示例:scp crt文件地址 username@ip:/etc/nginx/
scp D:\xxx\xxx\xxx\xxx.crt root@192.168.111.16:/etc/nginx/
步骤3
编写Nginx的配置文件。
命令:
vi /etc/conf/nginx.conf
将以下代码加入到你的Nginx配置文件当中。
#请注意 Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443 和 ssl on
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名 注意
server_name xxx.com
#请填写证书文件的相对路径或绝对路径 注意
ssl_certificate xxx.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径 注意
ssl_certificate_key xxx.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
使用命令 nginx -t 查看配置文件是否有问题,如下这么显示代表你Nginx配置文件写的没问题,但是还是要注意检查一下域名有没有配置对。
root@315cebd73436:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
步骤4
执行以下命令重载Nginx
nginx -s reload
重载成功后,即可通过 https://你的域名 进行访问了!
HTTP 自动跳转 HTTPS 的安全配置
在nginx.conf文件中添加以下配置
server {
listen 80;
#请填写绑定证书的域名
server_name xxx.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
完整配置文件
#请注意 Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443 和 ssl on
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名 注意
server_name xxx.com
#请填写证书文件的相对路径或绝对路径 注意
ssl_certificate xxx.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径 注意
ssl_certificate_key xxx.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
server {
listen 80;
#请填写绑定证书的域名
server_name xxx.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
然后重复步骤4即可。
大功告成!
笔者出现的问题
问题
因为笔者是部署在docker下,编写Nginx脚本的时候,没有把证书和私钥文件到docker容器当中,导致Nginx启动失败。查看容器启动日志:
root@VM-4-14-ubuntu:/home/docker-compose$ docker logs 容器id
nginx: [emerg] cannot load certificate "/etc/nginx/xxx.xxx.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/xxx.cn_bundle.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
解决方法:
通过docker cp命令,将证书和私钥文件复制到Nginx容器内
root@VM-4-14-ubuntu:/home/docker-compose$ docker cp /home/docker/nginx/conf/xxx.cn.key 容器名称:/etc/nginx
Successfully copied 3.58kB to 315cebd73436_nginx:/etc/nginx
root@VM-4-14-ubuntu:/home/docker-compose$ docker cp /home/docker/nginx/conf/xxx.cn_bundle.crt 容器名称:/etc/nginx
Successfully copied 6.14kB to 315cebd73436_nginx:/etc/nginx
关闭容器,重启容器后就可以看到启动成功了。
其他可能出现的问题,这里附上腾讯云的链接,网站进不去的话可以参考一下: