Nginx服务器怎么安装SSL证书?
Nginx服务器安装SSL证书主要分为四步:准备证书文件、配置443端口、检查Nginx配置并重载服务,最后配置80端口301跳转HTTPS。
Nginx配置HTTPS的核心在于使用匹配的私钥文件,以及包含服务器证书和必要中间CA证书的证书链文件。通过配置 ssl_certificate 和 ssl_certificate_key 指令监听 443 端口,可以确保客户端建立安全的 TLS 连接。
Nginx安装SSL证书的完整流程
在 Linux 服务器中,为 Nginx 部署 HTTPS 服务的标准执行顺序如下:
准备证书文件(合并服务器证书与中间CA证书)
↓
上传证书与私钥至服务器指定目录并配置文件权限
↓
配置 nginx.conf 中的 443 端口与证书路径
↓
配置 80 端口 HTTP 301 重定向至 HTTPS
↓
运行 nginx -t 检查配置文件语法
↓
重载 Nginx 服务(nginx -s reload)并排查端口与防火墙
第一步:证书文件的合并与准备
在使用 ssl_certificate 指令配置 HTTPS 时,证书文件应包含服务器证书以及必要的中间 CA 证书,并按照证书链顺序排列。如果 CA 机构签发时提供了多个独立的证书文件(如 domain.crt 和 ca.crt),需要在服务器端合并为一个 PEM 文件。
1. 常见证书文件对应关系
| 文件名称(示例) | 文件作用 | 包含内容 | 配置指令 | ||||
|---|---|---|---|---|---|---|---|
domain.crt | 服务器 SSL 证书 | 仅包含当前域名的公钥证书 | 不直接用于 Nginx(需合并) | ||||
ca.crt | 中间 CA 证书 | 颁发机构的证书链 | 不直接用于 Nginx(需合并) | ||||
fullchain.pem | 证书链文件 | 服务器证书 + 中间 CA 证书 | ssl_certificate | ||||
private.key | 证书私钥 | 与服务器证书匹配的私钥 | ssl_certificate_key |
注意:
fullchain.pem仅包含公钥与证书链,切勿将private.key私钥内容拼接进证书链文件中。
2. 文件拼接顺序与命令
对于包含证书链的 PEM 文件,服务器证书应放在最前面,中间 CA 证书依次放在后面。顺序错误可能导致部分客户端无法正确构建证书链。
在 Linux 终端中使用 cat 命令顺序合成:
cat domain.crt ca.crt > fullchain.pem
合成后的 fullchain.pem 与私钥文件 private.key 一起作为配置项使用。如果缺少工具或难以判断密钥格式,可以通过 SSL证书工具 完成证书与私钥的匹配检查。
3. 存放位置与文件权限
建议将证书相关文件存放在 /etc/nginx/cert/ 目录下,并对私钥设置严格的访问权限:
chmod 600 /etc/nginx/cert/private.key
私钥不应设置为所有用户可读。采用 600 权限时,应确保启动 Nginx 的账户能够读取该文件;常见的 systemd 或 root 启动方式可以直接使用 root:root 所有权。如果修改了 Nginx 的运行账户,需要根据实际情况调整文件的所有者或 ACL 权限。
第二步:修改 Nginx 配置文件
找到站点对应的配置文件(一般位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/site.conf),在 Server 块中增加 443 端口配置。怎么安装SSL证书 的核心在于写对路径与协议规范。
1. 基础 HTTPS 配置示例
Nginx
server {
listen 443 ssl;
server_name example.com www.example.com;
# 证书公钥文件路径(包含完整证书链)
ssl_certificate /etc/nginx/cert/fullchain.pem;
# 证书私钥文件路径
ssl_certificate_key /etc/nginx/cert/private.key;
# TLS 协议版本(密码套件优先使用 Nginx/OpenSSL 安全默认配置)
ssl_protocols TLSv1.2 TLSv1.3;
# 会话缓存设置(可选,优化握手性能)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
说明:密码套件建议优先采用 Nginx 与 OpenSSL 当前版本的默认安全配置。如果业务有明确的合规要求,再根据实际 OpenSSL 版本针对性设置
ssl_ciphers,不建议直接复制网上的固定套件配置。
2. 配置 HTTP 自动跳转 HTTPS
为了引导所有访问转化为加密连接,需要在独立的 80 端口 server 块中配置 301 重定向,实现 网站从HTTP更改为HTTPS:
Nginx
# 80 端口 HTTP 转向 HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
将 HTTP 80 端口与 HTTPS 443 端口分别配置在独立的 server 块中,可以让 HTTP 到 HTTPS 的跳转逻辑更加清晰,也便于排查重定向循环问题。
第三步:语法检查与服务重载
完成配置文件修改后,应先执行语法检查,再重载 Nginx。这样可以在正式加载新配置前发现语法或配置错误,避免错误配置导致服务重载失败。
1. 检查配置语法
在终端运行:
nginx -t
如果输出显示以下结果,代表配置文件语法正常:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
2. 重载 Nginx 服务
在不中断在线连接的前提下平滑加载新配置:
nginx -s reload
或者在 Systemd 系统中使用:
systemctl reload nginx
如需深入了解底层加密机制,可参考 什么是SSL证书 相关的说明。
常见问题 FAQ
Q:修改配置后运行 nginx -t 报错“cannot load certificate: PEM_read_bio_X509_AUX failed”?
A:一般与证书文件内容无法被 OpenSSL 正确解析有关,常见原因包括证书路径错误、PEM 文件损坏、证书内容不完整或文件中混入了非 PEM 内容。手动合并时,要确保域名证书结尾的 -----END CERTIFICATE----- 与中间证书开头的 -----BEGIN CERTIFICATE----- 之间存在正常的换行符,不能粘连在同一行。
Q:客户端访问时提示“证书不受信任”或“NET::ERR_CERT_AUTHORITY_INVALID”?
A:客户端是否能够通过 AIA 等机制补充获取缺失的中间证书,受操作系统、浏览器及网络环境限制,不能依赖客户端自动补全。因此一般应在 ssl_certificate 指定的 PEM 文件中同时包含服务器证书和必要的中间 CA 证书,以便客户端正确构建证书链。
Q:重载 Nginx 后,访问 443 端口提示“拒绝连接”或超时?
A:如果访问 443 端口时出现“拒绝连接”或超时,应先确认 Nginx 是否成功监听 443 端口,再检查系统防火墙和云服务器安全组是否放行 443。可以使用 ss -lntp | grep :443 或 netstat -tlpn | grep 443 检查监听状态。遇到访问异常也可查看 修复SSL证书错误 进行排查。
Q:在同一台 Nginx 服务器部署多个 HTTPS 站点,证书会混淆吗?
A:不会。对支持 SNI 的客户端,Nginx 会根据 TLS 握手阶段发送的 SNI(Server Name Indication)匹配对应的 server 块并选择对应的 SSL 证书。只要在不同的 server 块中配置对应的 server_name 以及匹配的 ssl_certificate 路径,即可在同一 IP 和 443 端口上运行多个独立的 HTTPS 站点。
Nginx 配置 HTTPS 时,重点检查三个地方:ssl_certificate 是否指向包含服务器证书和中间 CA 证书的 PEM 文件,ssl_certificate_key 是否与证书匹配,以及 443 端口是否正常监听。修改配置后先执行 nginx -t,确认无误后再 reload。HTTPS 确认正常后,再配置 80 端口 301 跳转。



京公网安备11010502031690号
网站经营企业工商营业执照
















