Nginx正确使用第三方商业SSL证书需闭环四个环节:确认内置--with-http_ssl_module模块、将证书_bundle.crt和私钥.key规范存放于/etc/nginx/ssl/并设私钥权限600、配置listen 443 ssl及80端口301跳转、开放防火墙与云平台443端口。

要在 Nginx 中正确使用第三方商业 SSL 证书(如 DigiCert、GlobalSign、Sectigo 或腾讯云/阿里云购买的证书),关键不是“能不能用”,而是四个环节必须全部闭环:模块支持、文件放置、配置准确、端口与权限就绪。漏掉任一环,nginx -t 就会报错或访问时连接失败。
确认 Nginx 已内置 SSL 模块
商业证书本身无特殊要求,但 Nginx 必须支持 TLS 解析。若缺失 --with-http_ssl_module,所有 ssl_* 指令都会被识别为非法语法。
- 运行
nginx -V 2>&1 | grep -o -- '--with-http_ssl_module',有输出即表示已启用 - 若无输出:需回到原始源码目录,重新执行
./configure --prefix=/usr/local/nginx --with-http_ssl_module [其他已有模块参数],再make(不make install),最后用objs/nginx覆盖原/usr/local/nginx/sbin/nginx - 替换前务必先停服务:
nginx -s stop;替换后验证:nginx -V再查一次
上传并规范存放证书文件
商业证书包解压后通常含两个核心文件:域名_bundle.crt(或 .pem,含站点证书+中间 CA)和 域名.key(私钥)。它们不能放错位置、也不能权限宽松。
- 推荐路径:
/etc/nginx/ssl/或/usr/local/nginx/conf/cert/—— 避免放在用户家目录或临时目录 - 私钥必须设为
600:chmod 600 /etc/nginx/ssl/example.com.key - 确保 Nginx 进程用户(如
nginx或www-data)对该路径下所有文件有读取权:chown nginx:nginx /etc/nginx/ssl/*.key /etc/nginx/ssl/*.crt - 检查私钥是否加密:
head -n 1 /etc/nginx/ssl/example.com.key,若含DEK-Info行,需先解密:openssl rsa -in example.com.key -out example.com.key
配置 server 块启用 HTTPS 并强制跳转
仅配 443 端口不够安全,生产环境必须让 HTTP 自动升级到 HTTPS。两段 server 配置缺一不可:
- HTTP 跳转段(监听 80):
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } - HTTPS 主服务段(监听 443):
server {<br> listen 443 ssl;<br> server_name example.com;<br> ssl_certificate /etc/nginx/ssl/example.com_bundle.crt;<br> ssl_certificate_key /etc/nginx/ssl/example.com.key;<br> ssl_protocols TLSv1.2 TLSv1.3;<br> ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;<br>} - 注意:
listen 443 ssl;中的ssl参数不可省略;路径必须绝对且拼写准确;不要混用.crt和.pem后缀导致路径错误
检查防火墙与云平台安全组
即使 Nginx 配置全对、进程正常运行,curl -I https://example.com 仍超时,大概率是网络层拦截。
- 本地防火墙(如 firewalld):
firewall-cmd --permanent --add-port=443/tcp && firewall-cmd --reload - 云服务器安全组(阿里云/腾讯云等):必须显式添加入方向规则,协议 TCP、端口 443、授权对象建议限制为
0.0.0.0/0(公网)或按需缩小范围 - 验证端口可达性:
telnet your-domain.com 443或nc -zv your-domain.com 443,通则说明网络链路已打通


















