用 Nginx 配置免费的Let’s Encrypt https证书

发布时间:2026/9/24 5:07:50
用 Nginx 配置免费的Let’s Encrypt https证书 用 Nginx 配置免费的 https 证书前置准备安装 Certbot 与申请证书Nginx 配置解析与手动配置验证与自动续期常见问题与提示使用Certbot自动申请 Let’s Encrypt 免费证书,小编使用环境CentOS前置准备开始前请确保满足以下条件域名解析你的域名如test.com已解析到服务器的公网 IP。Nginx 已安装如果尚未安装可执行sudo yum install epel-release sudo yum install nginx进行安装。端口开放服务器的80和443端口必须开放。防火墙 (firewalld)sudofirewall-cmd--permanent--add-servicehttpsudofirewall-cmd--permanent--add-servicehttpssudofirewall-cmd--reload关闭防火墙时提醒FirewallD is not running可以直接执行下一步这表示防火墙 (firewalld)服务没有启动并不是配置失败很多云服务器默认只靠云安全组来放行端口。云服务商安全组如果使用的是云服务器如阿里云、腾讯云还需要在控制台的安全组规则中放行 80 和 443 端口。SELinux 处理默认开启 SELinux可能会阻止 Certbot 操作。可执行以下命令为证书目录添加正确权限sudochcon-Rthttpd_sys_content_t /etc/letsencrypt/sudorestorecon-Rv/etc/nginx/sudorestorecon-Rv/usr/share/nginx/html/sudosetsebool-Phttpd_can_network_connect1如果希望快速测试也可临时关闭sudo setenforce 0重启后失效。如果报错chcon: cannot access/etc/letsencrypt/:No suchfileor directory不用处理直接执行下一步。因为 你还没申请证书所以/etc/letsencrypt/目录还不存在。等Certbot申请成功后它会自动创建这个目录到时候再执行chcon即可。restorecon没有输出通常表示执行成功setsebool也已生效。安装 Certbot 与申请证书安装 EPEL 源与 Certbotsudoyuminstallepel-release-ysudoyuminstallcertbot python3-certbot-nginx-y一键申请并自动配置执行以下命令将test.com替换为你的真实域名支持多个-d参数sudocertbot--nginx-dtest.com-dwww.test.com执行过程中Certbot 会引导你完成以下操作输入邮箱用于接收证书过期提醒。同意服务条款。自动验证域名所有权。关键步骤询问是否将 HTTP 流量重定向到 HTTPS。建议选择Redirect实现全站强制 HTTPS。Nginx 配置解析与手动配置执行 Certbot 后它会自动修改你的 Nginx 配置文件通常位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/下的站点配置文件核心部分如下server { listen 443 ssl; server_name test.com www.test.com; # Certbot 自动生成的证书路径 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 其他 SSL 优化参数Certbot 也会自动添加 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # ... location / { root /var/www/html; index index.html; } }如果你需要手动配置或了解跳转逻辑Certbot 通常会生成一个独立的 80 端口 server 块来实现 HTTP 到 HTTPS 的 301 永久跳转。验证与自动续期验证配置浏览器访问https://你的域名检查地址栏是否显示安全锁图标。也可用命令行验证curl-Ihttps://example.com测试自动续期Lets Encrypt证书有效期为 90 天Certbot 会自动创建定时任务续期。你可以手动测试sudocertbot renew --dry-run如果看到Congratulations, all renewals succeeded的提示说明自动续期配置正常。常见问题与提示server_name不匹配如果 Certbot 报错Could not automatically find a matching server block请确保 Nginx 配置中的server_name指令已正确填写为你的域名而非通配符_。证书链问题确保 Nginx 配置中引用的是fullchain.pem完整证书链而非cert.pem以避免部分客户端如安卓、微信报错。混合内容警告配置 HTTPS 后确保网页内引用的图片、JS、CSS 等资源也使用https://链接否则浏览器会提示“混合内容”并可能阻止加载。