前言
到目前为止,我们的博客使用的是‘http’方式访问,这种方式被认为是不安全的,现在都鼓励使用‘https’方式访问网站,那么要如何使用https方式访问网站呢,今天我们就来解决这个问题。
申请免费SSL证书
我们在腾讯云购买了云服务器、域名、DNS解析,所以我们在腾讯云申请免费的ssl证书;登录腾讯云,进入‘SSL 证书’-‘我的证书’页面,点击‘申请免费证书’;在‘证书绑定域名’中输入要使用https方式访问的域名(这个域名要先在‘我的域名’中添加),在‘域名验证方式’中选择自动DNS验证,点击‘提交申请’;需要等腾讯云平台签发SSL证书;等证书签发后回到‘SSL证书’-‘我的证书’页面,下载对应的证书(我下载的是nginx版的)
部署SSL证书
现在我们已经下载了ssl证书到本地,但是要让它生效,我们需要手动将它部署到域名对应的服务器的nginx中(我的是腾讯云服务器)
1. https方式监听的是443端口,我们需要打开这个端口(linux内部的防火墙和腾讯云的防火墙);
2. 我的nginx是部署在docker中,所以需要修改docker-compose.yml文件,映射docker容器的443端口到宿主机,同时挂载一个文件夹,用来存放ssl证书,修改后的docker-compose.yml文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| services: nginx: image: nginx:1.22 container_name: nginx restart: always volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./html:/usr/share/nginx/html - ./logs:/var/log/nginx - ./conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./ssl_certificate:/etc/nginx/ssl_certificate ports: - 80:80 - 443:443
|
- 将证书文件解压后上传到以docker-compose.yml文件所在文件夹为根目录的“ssl_certificate”文件夹中
- 修改nginx的default.conf配置文件,添加对https访问方式的监听
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| server { # SSL 默认访问端口号为 443 listen 443 ssl; # 绑定证书的域名 server_name qiuli.site www.qiuli.site; # 证书文件的相对路径或绝对路径 ssl_certificate /etc/nginx/ssl_certificate/qiuli.site_bundle.pem; # 私钥文件的相对路径或绝对路径 ssl_certificate_key /etc/nginx/ssl_certificate/qiuli.site.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 / { proxy_pass http://10.6.0.3:4000/; #proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server { # SSL 默认访问端口号为 443 listen 443 ssl; # 绑定证书的域名 server_name blog.qiuli.site; # 证书文件的相对路径或绝对路径 ssl_certificate /etc/nginx/ssl_certificate/blog.qiuli.site_bundle.pem; # 私钥文件的相对路径或绝对路径 ssl_certificate_key /etc/nginx/ssl_certificate/blog.qiuli.site.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 / { proxy_pass http://10.6.0.3:4000/; #proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server { listen 80; #绑定证书的域名 server_name qiuli.site www.qiuli.site blog.qiuli.site; #把http的域名请求转成https return 301 https://$host$request_uri; }
|
验证配置并让其生效
使用命令进入nginx的docker容器
1
| docker exec -it nginx /bin/bash
|
验证配置是否有效
更新配置令其生效
如果有必要则重启nginx,这里不再赘述