ssl_certificate 必须指向绝对路径的 pem 格式证书链文件,含域名证书和正确顺序的中间证书(不含根证书和私钥),路径需可读、权限为644,目录需有+x权限,私钥由ssl_certificate_key单独指定且权限为600。

ssl_certificate 指令必须指向一个完整、单一、格式合规的 PEM 文件,且该文件路径需为绝对路径,不能是相对路径或符号链接(除非目标真实存在且权限正确)。
这个文件不是原始的域名证书,而是合并后的证书链文件,包含:
- 你的域名证书(
yourdomain.com.crt或fullchain.pem) - 所有中间证书(顺序不能错,通常由 CA 提供)
根证书不放入,也不应包含私钥。
✅ 正确设置完整物理路径的要点
必须用绝对路径
例如:/etc/nginx/ssl/example.com.fullchain.pem
❌ 不要用./certs/fullchain.pem、~/certs/fullchain.pem或/usr/local/nginx/conf/certs/...(除非你确认那是 Nginx 实际读取配置时的当前工作目录,但极不可靠)-
路径要可被 Nginx 进程读取
- 文件属主建议为
root,组可为nginx或www-data - 权限设为
644(即-rw-r--r--) - 所在目录也需有执行权限(
+x),否则 Nginx 无法进入目录读取文件
- 文件属主建议为
-
文件内容顺序严格固定
cat example.com.crt intermediate.crt > /etc/nginx/ssl/example.com.fullchain.pem
中间证书顺序错误会导致客户端信任链断裂,尤其 iOS 和部分 Java 客户端敏感。
不要和私钥混在一起
ssl_certificate只放证书链;私钥由ssl_certificate_key单独指定,路径也必须是绝对路径,权限必须为600。
? 推荐存放位置与命名习惯
- 统一放在
/etc/nginx/ssl/下(Linux)或C:\nginx\ssl\(Windows) - 文件名体现域名和用途,例如:
-
/etc/nginx/ssl/api.example.com.fullchain.pem /etc/nginx/ssl/api.example.com.key
-
避免放在网站根目录(如 /var/www/html/)或任何可能被 HTTP 直接访问到的路径。
? 验证路径是否生效
配置完后执行:
sudo nginx -t
通过才说明路径可读、格式合法。
再用 OpenSSL 快速验证证书链完整性:
openssl x509 -in /etc/nginx/ssl/example.com.fullchain.pem -text -noout
应能正常输出证书信息,且开头是 -----BEGIN CERTIFICATE-----,结尾是 -----END CERTIFICATE-----,且有多段(域名证书 + 中间证书)。
不复杂但容易忽略











