Nginx 配置 HTTPS 免费证书教程:Let's Encrypt 签名、自动续期一步到位,让网站变 https 小绿锁


很多站长第一次看到"你的连接不是私密连接"或浏览器地址栏的感叹号,都会一脸懵。网站要显示那个很安心的绿色小锁,就得配上 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 → 一条命令签发 + 自动改配置 → 配置好自动续期,三步就拿到地址栏小绿锁。重点是别忽略自动续期,否则证书一过更新就把自己坑了。照上面做,几分钟就能让网站安全升级。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Fail2ban 防暴力破解教程:自动封禁爆破 IP、SSH 和网站防护,秒级阻断攻击

Linux crontab 定时任务详解:cron 表达式、常用命令与自动化脚本,让服务器自己干活

评 论
更换验证码