如果你正在开发微信小程序,并还没有https,这篇可能可以帮到你。
可https,在国内线上用https的都不算多,更何况是开发过程中用https,应该就更少了吧。
本篇不讲什么是https,什么是SSL,什么是nginx
想了解这些的请绕道,相信有很多优秀的文章会告诉你。
本篇要讲的在最短的时间内,让你的网站从http升级到https。
开始教程前再说一句:https你值得拥有。
开始使用Let's Encrypt项目
Let's Encrypt项目官网: https://letsencrypt.org/getting-started/
推荐使用certbot自动签发证书工具。
访问 https://certbot.eff.org/ ,选择对应的 WebSever 程序以及操作系统,即可获得 certbot 相关使用指导。
按照指导安装相应的依赖,然后下载 certbot 自动签发证书工具。
- wget https://dl.eff.org/certbot-auto
- chmod a+x certbot-auto
假设你的服务器是CentOS+NginX,certbot-auto的文件路径是/path/to/certbot-auto,域名是 www.example.com ,对应的网站根目录路径是 /usr/share/nginx/html/ ,请使用以下命令为服务器签发证书:
- /path/to/certbot-auto certonly --webroot -w /usr/share/nginx/html/ -d example.com -d www.example.com
certbot-auto工具会在/usr/share/nginx/html/的目录下自动创建一个.well-known的文件,然后通过访问 https://www.example.com/.well-known 来验证你所签署的域名是否正确解析到了当前主机上。
成功签发的证书会自动存至 /etc/letsencrypt/live/www.example.com/ 目录下。
自动续签
Let's Encrypt证书有效期为 90 天,请及时续签。续签命令如下:
- /path/to/certbot-auto renew --quiet
以crond为例,可以在/etc/crontab中添加两行配置,使之自动续签:
- 0 0 * * * /path/to/certbot-auto renew --quiet
- 0 12 * * * /path/to/certbot-auto renew --quiet
这行命令会在每天 0 点和 12点自动尝试帮你续签。根据Let's Encrypt官方说明,在证书到期之前,进行以上操作不会有任何影响,并且还可以及时避免「由于某些故障导致的证书被错误吊销」。
NginX配置
假设NginX配置文件位于/etc/nginx/conf.d/目录下,可以新建一个www.example.com.conf的文件,内容如下:
- server {
- listen 80;
- server_name www.example.com;
- location / {
- return 301 https://$server_name$request_uri;
- }
- # 301 重定向,强制全站跳转到 HTTPS,非必须
- }
- server {
- listen 443 ssl;
- server_name www.example.com;
- ssl on;
- ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
- ssl_prefer_server_ciphers On;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
- }
WebSocket的WS转安全协议WSS的NginX配置
- location ~ ^/socket.io {
- # switch off logging
- access_log off;
- # redirect all HTTP traffic to localhost:8080
- proxy_pass https://127.0.0.1:3110;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- # WebSocket support (nginx 1.4)
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- }