CentOS 上 Nginx SSL 配置常见问题与排查清单
一 证书与路径类问题
- 证书链不完整导致浏览器提示“证书不安全”或“NET::ERR_CERT_AUTHORITY_INVALID”。多数云厂商下载的 Nginx 证书包包含多个文件(如 .crt/.pem 与 .key),有时还需要提供 CA 中间证书/链文件。常见做法是将中间证书与服务器证书合并为一个文件(顺序:服务器证书在前、中间证书在后),或单独用 ssl_trusted_certificate 指定链文件用于 OCSP/验证。路径错误则会在日志中出现 BIO_new_file() failed: No such file or directory,需核对证书与私钥路径、权限与文件名是否一致。若使用相对路径,注意不要在路径最前面多加“/”,否则会被当作绝对路径处理。Nginx 默认配置目录可能为 /usr/local/nginx/conf 或 /etc/nginx,可用 nginx -t 查看配置文件的真实路径后再放置证书。
二 端口与防火墙类问题
- 访问 https://域名 打不开,或仅 http:// 能访问,多半是 443 端口未开放或未在 Nginx 中监听。先在安全组/云防火墙放行 TCP 443,再确认 Nginx 配置包含 listen 443 ssl; 的 server 块,最后用命令检查端口连通性(如:ss -tlnp | grep :443 或 telnet 域名 443)。若仅配置了 443 而未做 HTTP→HTTPS 跳转,用户仍可能访问到未加密的站点;建议在 listen 80 的 server 中使用 return 301 https://$host$request_uri; 强制跳转。
三 模块与编译类问题
- 启动或 reload 时报错 the “ssl” parameter requires ngx_http_ssl_module,说明当前 Nginx 未编译进 SSL 模块。需重新编译:在源码目录执行 ./configure --with-http_ssl_module(可叠加其他需要的模块),然后 make 并用新二进制替换旧程序,再启动 Nginx。验证是否包含模块可执行 nginx -V 查看编译参数。若使用包管理器安装,通常默认已包含该模块;自行编译或从第三方源安装时需特别确认。
四 协议与加密套件配置问题
- 仍启用 SSLv3/TLSv1/TLSv1.1 或弱套件,会被现代浏览器标记为不安全。建议仅启用 TLSv1.2/TLSv1.3,并选择 ECDHE 前向保密套件,例如:ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 选用 ECDHE-ECDSA/ RSA-AES128/256-GCM-SHA256 等;开启 ssl_prefer_server_ciphers on;、会话缓存与会话票据以提升性能与安全性。若需 HTTP/2,在 listen 443 后添加 http2。证书链不完整或 OCSP 配置不当,也会触发浏览器安全警告,必要时配置 ssl_trusted_certificate 与 resolver 以启用 OCSP Stapling。
五 自动续期与多域名管理
- 使用 Let’s Encrypt 的 Certbot 可快速部署与自动续期:在 CentOS 7/8 上先安装 EPEL 与插件(yum install -y epel-release certbot python3-certbot-nginx),执行 certbot --nginx 按向导选择域名并设置 HTTP→HTTPS 重定向;证书默认位于 /etc/letsencrypt/live/你的域名/(常用文件:fullchain.pem 与 privkey.pem)。建议定期测试续期:certbot renew --dry-run。新增域名时,先在 Nginx 中配置好 server_name,再运行 certbot --nginx 选择新增域名即可。