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

直接用第三方商业证书(比如 DigiCert、GlobalSign、腾讯云或阿里云购买的)配置 Nginx,关键不是“能不能配”,而是四个环节必须全部到位:模块支持、文件存放、配置写对、端口放行。缺一个,nginx -t 就报错,或者浏览器打不开 HTTPS。
确认 Nginx 已编译 SSL 模块
商业证书本身没特殊要求,但 Nginx 必须能解析 TLS。如果没启用 --with-http_ssl_module,所有 ssl_* 指令都会被当成语法错误。
- 运行
nginx -V 2>&1 | grep -o '--with-http_ssl_module',有输出说明已支持 - 若无输出:需回到源码目录,用原有
./configure参数补上--with-http_ssl_module,再make(不make install),最后用objs/nginx替换原二进制文件 - 替换前先停服务:
nginx -s stop;替换后再次执行nginx -V验证
上传并规范存放证书文件
商业证书包解压后,核心是两个文件:域名_bundle.crt(或 .pem,含站点证书+中间 CA)和域名.key(私钥)。它们不能乱放,也不能权限宽松。
- 推荐路径:
/etc/nginx/ssl/或/usr/local/nginx/conf/cert/,别放在家目录或/tmp - 私钥必须设为
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 {<br> listen 80;<br> server_name example.com;<br> return 301 https://$server_name$request_uri;<br>} -
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>}
开放防火墙与云平台 443 端口
配置正确不代表能访问,系统防火墙和云服务商安全组必须放行 443 端口。
- CentOS 7+:
firewall-cmd --permanent --add-port=443/tcp && firewall-cmd --reload - Ubuntu(UFW):
ufw allow 443/tcp - 腾讯云/阿里云:登录控制台,在对应实例的安全组规则中添加入方向 TCP:443 规则
- 验证是否生效:
curl -I http://example.com应返回 301;curl -I https://example.com应返回 200 且含Strict-Transport-Security头(可选)











