2023年1月8日

Nginx + Let’s Encrypt 免费 SSL 证书部署全流程实战教程(CentOS)



1. 环境准备

  • 操作系统:CentOS 7/8 或类似

  • 已安装 Nginx,并确保网站能正常通过 HTTP(80端口)访问

  • 域名已解析指向服务器公网 IP,且 DNS 生效

  • 服务器有 root 权限或 sudo 权限


2. 安装 Certbot(Let’s Encrypt 客户端)

Certbot 是 Let’s Encrypt 官方推荐的自动申请、安装、续期证书的工具。

2.1 安装 EPEL 仓库(CentOS 7示例)

sudo yum install epel-release -y

2.2 安装 Certbot 和 Nginx 插件

sudo yum install certbot python3-certbot-nginx -y

3. 申请 SSL 证书

3.1 检查 nginx 配置,确保网站可以通过 HTTP 访问

确认你的 Nginx 站点配置有:

server { listen 80; server_name yourdomain.com www.yourdomain.com; root /www/wwwroot/yourdomain; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { # PHP fastcgi 配置,根据实际修改 include fastcgi_params; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }}

重载 nginx:

sudo nginx -tsudo systemctl reload nginx

3.2 运行 Certbot 自动申请证书

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

过程会提示输入邮箱,是否同意协议,是否自动重定向 HTTP 到 HTTPS。

推荐选择自动重定向,这样 certbot 会帮你改写 nginx 配置,实现 80 跳 443。


4. 验证 HTTPS 站点

申请成功后,Certbot 会自动更新你的 nginx 配置,监听 443 端口,配置好证书路径。

你可以通过浏览器访问:

https://yourdomain.com

确认页面正常且浏览器显示安全锁。


5. 自动续期设置

Certbot 默认安装时,会添加系统定时任务(cron 或 systemd timer)自动续期证书。

可以用以下命令测试续期过程:

sudo certbot renew --dry-run

成功时会看到模拟续期成功提示。


6. 手动配置 HTTPS(可选)

如果你想手动配置 nginx 证书,也可以:

server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; root /www/wwwroot/yourdomain; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-cgi.sock; # PHP-FPM socket,根据实际修改 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }}server { listen 80; server_name yourdomain.com www.yourdomain.com; # 强制跳转到 HTTPS return 301 https://$host$request_uri;}

7. 常见问题排查

  • 证书申请失败:确认域名解析正确,端口 80/443 没被防火墙或安全组阻断

  • Nginx 配置错误:使用 nginx -t 验证语法,查看错误日志 /var/log/nginx/error.log

  • 证书续期失败:确认自动任务正常执行,手动测试续期 certbot renew --dry-run

  • PHP 版本兼容:确保 nginx 配置的 fastcgi_pass 指向正确版本的 PHP-FPM socket


8. 总结

  • 使用 Certbot 是最简单方便申请 Let’s Encrypt 证书方式

  • 申请时选择自动重定向,可以自动完成 HTTP→HTTPS 跳转配置

  • 配置时注意 PHP-FPM 版本与路径,避免版本不匹配问题导致代码执行异常

  • 及时测试续期,确保证书不会过期导致网站不安全