Nginx 配置 HTTPS 证书流程

本文档提供通过 Certbot 工具为 Nginx 配置 SSL/TLS 证书的完整流程,支持自动续期。

环境准备

  1. 服务器要求

    • 已安装 Nginx 且服务正常运行
    • 域名已解析到服务器 IP
    • 防火墙开放 80(HTTP)和 443(HTTPS)端口
  2. 安装 Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx

# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

生成 SSL 证书

# 自动获取证书并修改 Nginx 配置(推荐)
sudo certbot --nginx -d 你的域名 -d www.你的域名

# 仅生成证书(不修改配置)
sudo certbot certonly --nginx -d 你的域名

交互提示:输入邮箱、同意条款,选择是否将 HTTP 流量重定向到 HTTPS。

手动配置 Nginx

  1. 编辑配置文件(如 /etc/nginx/sites-available/your-site.conf
server {
    listen 80;
    server_name 你的域名 www.你的域名;
    return 301 https://$host$request_uri; # HTTP 重定向到 HTTPS
}

server {
    listen 443 ssl;
    server_name 你的域名 www.你的域名;
    
    ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
    
    # 其他配置(如 root, index 等)
    # ...
}
  1. 测试配置并重启 Nginx
sudo nginx -t       # 检查语法
sudo systemctl reload nginx  # 平滑重启
# 或
sudo systemctl restart nginx

证书自动续期

  1. 手动测试续期
sudo certbot renew --dry-run
  1. 添加定时任务
sudo crontab -e

添加以下行(每天 2:30 检查续期):

30 2 * * * /usr/bin/certbot renew --quiet

验证 HTTPS

  • 浏览器访问https://你的域名,确认地址栏显示 🔒 标识
  • 命令行验证
curl -I https://你的域名

故障排查

  • 证书路径错误:确认 /etc/letsencrypt/live/你的域名/ 存在证书文件
  • 权限问题:确保 Nginx 用户(通常为 www-datanginx)有读取权限
  • 端口冲突:检查 netstat -tuln | grep ':443' 确认 443 端口未被占用
sudo journalctl -u nginx --since "5 minutes ago"  # 查看 Nginx 日志

提示:证书到期前 Certbot 会自动续期,建议定期执行 sudo certbot renew --dry-run 验证自动续期功能。