站点跑起来之后第一件事就是上 HTTPS。现在浏览器对 http 页面直接标“不安全”,搜索引擎也把 https 当排名因素。
拿证书
用免费证书就够了,90 天有效期。面板里一键申请,或者用 acme.sh:
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --issue -d mi-blog.cn -d www.mi-blog.cn --webroot /www/wwwroot/mi-blog.cn
--webroot 方式会在网站根目录写验证文件,不占用 80 端口,比 standalone 模式安全——后者要临时停掉 Nginx。
配置 Nginx
server {
listen 443 ssl http2;
server_name mi-blog.cn;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000" always;
}
server {
listen 80;
server_name mi-blog.cn;
return 301 https://$host$request_uri;
}
HSTS 那行要谨慎:一旦下发,浏览器会在有效期内强制 https,调试时想临时回退会很麻烦。确认 443 稳定了再加。
自动续期
~/.acme.sh/acme.sh --install-cert -d mi-blog.cn \
--key-file /www/server/panel/vhost/cert/mi-blog.cn/privkey.pem \
--fullchain-file /www/server/panel/vhost/cert/mi-blog.cn/fullchain.pem \
--reloadcmd "nginx -s reload"
装完之后会有一个 cron 每天检查,到期前自动续。曾经忘了配这个,第 91 天全站证书过期,浏览器直接拦截,赶紧补上。
混合内容:最讨厌的问题
页面变 https 之后,正文里的图片还是 http://,浏览器会拦截或给警告。三处都要改:
UPDATE wp_options SET option_value = REPLACE(option_value,'http://mi-blog.cn','https://mi-blog.cn')
WHERE option_name IN ('siteurl','home');
UPDATE wp_posts SET post_content = REPLACE(post_content,'http://mi-blog.cn','https://mi-blog.cn') WHERE post_type='post';
还有主题设置、小工具里的图片地址存在 wp_postmeta,也要扫一遍。改完清缓存才生效。
检查清单
- 首页、文章页、后台都无警告图标
- 图片、CSS、JS 的请求全是 https
- http 访问 301 跳到 https
- 证书链完整(用 SSL Labs 测一下 A 以上)
整套做完大概一小时,之后基本不用管。唯一要记住的是续期,配好自动续期就不用记了。
- THE END -
最后修改:2022年8月13日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://mi-blog.cn/archives/661
共有 0 条评论