很多站长第一次看到"你的连接不是私密连接"或浏览器地址栏的感叹号,都会一脸懵。网站要显示那个很安心的绿色小锁,就得配上 HTTPS——也就是 SSL 证书。好消息是,用免费的 Let's Encrypt 证书搭配 Nginx,完全不用花钱,几分钟就能让网站从 http 变成 https。这篇文章手把手教你签发免费证书、配置 Nginx、并设置自动续期。
一、什么是 HTTPS 和 SSL 证书
HTTPS 就是在 HTTP 外面加了一层加密(SSL/TLS)。浏览器和服务器之间的数据是加密传输的,别人偷不到明文,还能校验"这个网站确实是我访问的"。
浏览器的小锁就来自服务器的 SSL 证书。证书由权威机构签发,验证你的域名归你所有。
二、免费证书怎么选
常见免费方案:
- Let's Encrypt:最主流,90 天自动续期,配合 certbot 全自动
- ZeroSSL:也是免费,流程略有不同
- 云厂商(阿里、腾讯)也有免费版,时长类似
个人 VPS 强烈推荐 Let's Encrypt + Certbot,一条命令搞定,还能自动续期。
三、安装 Certbot
Ubuntu / Debian:
apt update
apt install -y certbot python3-certbot-nginx
CentOS / AlmaLinux:
yum install -y certbot python3-certbot-nginx
certbot 的 nginx 插件能自动帮你改配置并获得证书。
四、签发证书(自动配置 Nginx)
前提:你的域名已经解析到这台服务器的 IP(A 记录),且 80 端口可正常访问到站点。
一条命令即可签发并自动套用 HTTPS:
certbot --nginx -d 你的域名.com -d www.你的域名.com
过程中按提示操作:
- 输入邮箱(用于证书过期提醒)
- 同意服务条款
- 选择是否把 HTTP 自动跳转到 HTTPS(选 2 建议跳转)
成功后会显示证书路径,并自动帮你把 Nginx 站点改成 https。
五、验证并强制跳转 HTTPS
签发后重启 Nginx:
nginx -t && nginx -s reload
浏览器访问 https://你的域名.com,看到地址栏小锁即成功。
强制所有 http 都跳转到 https: 若刚才没选自动跳转,在站点配置里加一个 80 端口 server 块:
server {
listen 80;
server_name 你的域名.com www.你的域名.com;
return 301 https://$host$request_uri;
}
重载后,访问 http 会自动跳到 https。
六、配置自动续期(关键,别让证书过期)
Let's Encrypt 证书有效期 90 天,必须定期续期。certbot 一般已自带定时任务(systemd timer 或 crontab),先检查:
systemctl list-timers | grep certbot # Debian/Ubuntu 用 timer
# 或
crontab -l | grep certbot
手动测试续期是否流畅:
certbot renew --dry-run
出现"Congratulations"说明续期正常,以后到点它会自动帮你续。没有定时任务的话,加到 crontab:
0 3 * * * certbot renew --quiet --deploy-hook "nginx -s reload"
--deploy-hook "nginx -s reload" 续期成功后自动重载 Nginx 应用新证书。
七、配置 SSL 参数优化(让锁更稳、评价更高)
在证书基础上,可对 Nginx 的 ssl 相关参数做优化(放在 443 的 server 块里):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
TLSv1.2 TLSv1.3 是当前安全版本;加上会话缓存能减少握手开销,访问更快。
八、宝塔 / 面板怎么配
用宝塔面板更省事:网站 → 设置 → SSL → Let's Encrypt,勾选域名点申请,面板自动完成签发和续期,无需命令行。适合不想折腾命令行的新手。
九、常见问题
Q1:报错说域名验证失败 / 没有 A 记录?
certbot 需要先能访问到你服务器来验证域名。确认域名解析到本机 IP、80 端口未被防火墙拦截、以及站点配置的 server_name 与 -d 填的域名一致。
Q2:申请后访问出现证书不信任?
可能是走了自签名或经历过期证书。用 Let's Encrypt 的证书一般是受信的;若显示过期,手动执行 certbot renew 或 certbot certonly --force-renewal 重新签发。
Q3:续期了但还是旧证书 / 过期?
续期成功后要 nginx -s reload 让 Nginx 重新读取证书文件。用 --deploy-hook 自动做,或写完手动 reload 一次验证。
Q4:多域名 / 子域名怎么申请?
一条命令带多个 -d:certbot --nginx -d a.com -d b.com -d www.a.com。各域名都能解析到本机即可。
十、HTTPS 之后还能做什么
配好 HTTPS 后,可继续:给后端应用做反向代理并套上证书(配合本站 Nginx 反向代理教程)、配置 HTTP/2 提速、给接口限流。一套组合下来,网站既安全又流畅。
总结
给 Nginx 配免费 HTTPS 证书并不神秘:装 certbot → 一条命令签发 + 自动改配置 → 配置好自动续期,三步就拿到地址栏小绿锁。重点是别忽略自动续期,否则证书一过更新就把自己坑了。照上面做,几分钟就能让网站安全升级。
