我的个人站点一直跑在雨云上,最近需要给几个子域名配上HTTPS。Let’s Encrypt是最省事的方案,免费、自动续期、主流浏览器都信任。下面直接记录操作步骤和踩过的坑。
环境:Ubuntu 22.04,Nginx,域名DNS解析已指向服务器IP。
第一步:安装certbot
certbot是Let’s Encrypt官方客户端,支持多种Web服务器。用snap装最干净,apt版本太旧容易出问题。
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
验证安装:`certbot –version` 能看到版本号就行。
步:申请证书
单域名和通配符证书用不同的验证方式。我只需要子域名,用HTTP验证最直接,不需要改DNS记录。
先确保Nginx已经运行,并且80端口能访问。certbot会在`.well-known/acme-challenge/`下放临时文件做验证。
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
`-w`指定网站根目录,`-d`指定域名。多个域名用多个`-d`。执行后按提示输入邮箱(用于过期提醒),同意协议。成功后会输出证书路径:
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
如果不想停掉Nginx(比如线上服务),用`–webroot`模式。如果服务器上只有这一个站点,也可以用`–nginx`插件自动配置Nginx:
sudo certbot --nginx -d example.com
这个方式会直接修改Nginx配置文件,省去手动配置的步骤。但我习惯手动控制,所以只用`–webroot`拿证书。
第三步:配置Nginx使用证书
编辑站点配置文件,比如`/etc/nginx/sites-available/example.com`:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 推荐的安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
root /var/www/html;
index index.html index.htm;
}
# 强制HTTP跳转HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
检查配置语法:`sudo nginx -t`。没问题就重载:`sudo systemctl reload nginx`。
第四步:自动续期
Let’s Encrypt证书有效期90天。certbot自带续期命令,用cron或systemd timer自动执行。
测试续期是否正常工作:
sudo certbot renew --dry-run
没有报错就添加定时任务。用crontab:
sudo crontab -e
加入一行,每天凌晨2点检查续期:
0 2 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx
`–quiet`不输出日志,`reload nginx`让新证书生效。如果用的是雨云的云服务器,它们的系统镜像默认开了自动续期脚本,但手动加上更放心。
第五步:验证
浏览器访问`https://example.com`,看地址栏的小锁。也可以用命令行检查:
curl -I https://example.com
返回头里有`HTTP/2 200`和`SSL certificate verify ok`就对了。
踩坑记录
1. 申请时提示”Failed to connect to … :80″:检查防火墙,确保80端口开放。雨云的控制台安全组要放行HTTP流量。
2. 通配符证书不能用`–webroot`,必须用DNS验证:`certbot certonly –manual –preferred-challenges dns -d *.example.com`。需要手动添加TXT记录,麻烦一点但支持泛域名。
3. 证书续期后Nginx没加载新证书:必须reload Nginx,只renew不会自动通知Nginx。上面cron里已经加了`systemctl reload nginx`。
4. 如果服务器上有多个站点,每个站点的`–webroot`路径可能不同。用`-w /path1 -d domain1 -w /path2 -d domain2`指定不同根目录。
总结
这套流程跑下来,从安装到HTTPS生效不超过10分钟。雨云的服务器稳定性不错,配合Let’s Encrypt自动续期,基本不用操心证书过期问题。唯一需要记住的是renew后reload Nginx,其他都是常规操作。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容