配置ssl_certificate和ssl_certificate_key的关键是路径正确、文件匹配、权限合规:前者指向含站点证书与中间链的.pem/.crt文件,后者指向无密码保护的.key私钥;Windows用正斜杠或双反斜杠写路径,Linux推荐存于/etc/nginx/ssl/并设chmod 600。

配置 ssl_certificate 和 ssl_certificate_key 的关键,是路径写对、文件放对、权限合规。Windows 和 Linux 下逻辑一致,但路径写法和存放习惯略有差异。
证书与私钥文件必须成对且格式正确
这两个指令分别指向:
-
ssl_certificate:服务器证书文件(
.crt或.pem),可能包含站点证书 + 中间证书(推荐合并为fullchain.pem); -
ssl_certificate_key:对应证书的私钥文件(
.key),必须是未加密的(即无密码保护),否则 Nginx 启动会卡住等待输入密码。
常见错误包括:私钥带密码未去除、证书内容缺失中间链、.crt 和 .key 不匹配(比如用 A 域名的私钥配 B 域名的证书)。
路径写法要匹配 Nginx 运行视角
Nginx 解析路径时,以它的安装根目录为基准(不是 conf 目录,也不是当前命令行路径)。
- Windows 示例(Nginx 安装在
C: ginx-1.30.2):ssl_certificate C:/nginx-1.30.2/cert/FullSSL.crt;ssl_certificate_key C:/nginx-1.30.2/cert/SSL.key;
注意:正斜杠/或双反斜杠\都可,单反斜杠在配置里易被误解析为转义符。 - Linux 示例(Nginx 根目录通常为
/usr/local/nginx或/etc/nginx):ssl_certificate /etc/nginx/ssl/example.com.pem;ssl_certificate_key /etc/nginx/ssl/example.com.key;
推荐将证书统一放在/etc/nginx/ssl/并设权限:chmod 600 *.key(防止私钥被非 root 用户读取)。
验证路径是否生效的快捷方式
改完配置后别急着 reload,先做两件事:
- 运行
nginx -t(Windows 下为nginx.exe -t):检查语法 + 路径是否存在、可读; - 如果报错
open() "/xxx/xxx.crt" failed (2: No such file or directory),说明路径不对或文件名拼错(注意大小写、扩展名); - 如果报错
PEM_read_bio_PrivateKey() failed,大概率是私钥格式错误(比如带密码、或用了server.key.org这类备份文件)。
多域名或通配符证书怎么处理
一个 server 块只能配一套证书。若需支持多个不相关的域名(如 a.com 和 b.net),有三种方式:
- 用 SAN(Subject Alternative Name)证书:一张证书里包含多个域名,
ssl_certificate指向它即可; - 为每个域名建独立的 server 块,各自配对应的证书路径;
- 使用 TLS SNI(现代浏览器都支持),Nginx 自动根据 ClientHello 中的域名选择证书——前提是各证书都已加载进同一 server 块,通过
ssl_certificate_by_lua_block或第三方模块实现,普通配置不涉及。
通配符证书(如 *.example.com)直接填入 ssl_certificate 即可,无需额外配置,但注意它不覆盖根域名(example.com 需单独加进 SAN)。


















