bg-tutorials

如何在NGINX上安装SSL证书

本指南将向您展示如何在 NGINX 上安装 SSL/TLS 证书。内容涵盖了大多数人容易出错的部分:构建 NGINX 所需的正确证书链(”fullchain”)、将正确的指令指向正确的文件、在重新加载之前测试配置,以及添加一个干净的 HTTP 到 HTTPS 重定向,确保每位访客都能进入您网站的安全版本。

为 NGINX 生成 CSR 代码

如果您已经生成了 CSR 并手头持有已签发的证书文件,可以直接跳到在 NGINX 上安装 SSL 证书部分。

在证书颁发机构签发证书之前,您需要提交一份 CSR(证书签名请求):一段包含您域名信息和公钥的小型文本块,与保存在服务器上的私钥配对。您有两种选择:

  • 使用我们的CSR 生成器自动生成 CSR。该工具会同时返回 CSR 和匹配的私钥,随后您可将其上传到服务器。
  • 按照我们的教程如何在 NGINX 上生成 CSR,使用 OpenSSL 在服务器本身上生成 CSR。私钥将保留在服务器上。

用任意文本编辑器打开生成的 .csr 文件;其中的文本块(包括 —–BEGIN CERTIFICATE REQUEST—– 和 —–END CERTIFICATE REQUEST—– 这两行)就是您在结账时粘贴到 SSL 申请表单中的内容。如果想在提交前确认 CSR 的内容,可以将其粘贴到我们的CSR 解码器中。

在 NGINX 上安装 SSL 证书

一旦 CA 签发了证书,您通常会收到以下内容:

  • 您的主(服务器)证书,通常是以您的域名命名的 .crt 文件。
  • 中间证书(有时还包括根证书),可能是单独的 .crt 文件,也可能打包在一个 .ca-bundle 文件中。
  • 与您的 CSR 一起生成的私钥(一个 .key 文件)。

NGINX 需要将服务器证书和中间证书链合并为一个文件(即 “fullchain”),并通过 ssl_certificate 指向该文件;私钥则通过 ssl_certificate_key 单独指向。跳过证书链是最常见的安装错误:证书在桌面浏览器中看起来没有问题,但在 Android、API 客户端以及像我们的 SSL Checker 这样的工具中却会失败。

步骤 1:将证书合并为一个文件

合并文件中证书的顺序很重要。您的服务器证书排在最前面,然后是从签发叶证书的 CA 向上的每个中间证书,根证书排在最后(或省略,因为浏览器已经信任其内置存储中的根证书):

  • 您域名的主证书。
  • 中间证书。
  • 根证书(可选)。

您可以在文本编辑器中手动构建 fullchain 文件(按顺序粘贴每个 PEM 块),也可以通过一条 cat 命令完成。如果您收到的是单独的中间证书和根证书文件,请运行:

cat your_domain.crt intermediate.crt root.crt > ssl-bundle.crt

如果中间证书和根证书已经合并在一个 .ca-bundle 文件中,请运行:

cat example_com.crt example_com.ca-bundle > ssl-bundle.crt

将文件名替换为您自己的文件名。将合并后的文件(以及私钥,如果尚未存在于该目录)移动到服务器上的 SSL 目录,例如 /etc/ssl/ 或 /etc/nginx/ssl/。确保密钥文件只能由 root 读取:

sudo chmod 600 /etc/ssl/your_domain.key
sudo chown root:root /etc/ssl/your_domain.key

步骤 2:编辑 NGINX 配置文件

打开您网站的 NGINX 配置文件。在 Debian 和 Ubuntu 上,该文件位于 /etc/nginx/sites-available/(并在 sites-enabled/ 中有一个符号链接);在 RHEL、CentOS、AlmaLinux 和 Rocky Linux 上,则位于 /etc/nginx/conf.d/。添加或编辑监听 443 端口的 server 块,使其指向 fullchain 文件和私钥:

server {
    listen 443 ssl;
    http2 on;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/ssl-bundle.crt;
    ssl_certificate_key /etc/ssl/your_domain.key;

    # Modern TLS only
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;

    ssl_session_timeout 1d;
    ssl_session_cache shared:NginxSSL:10m;
    ssl_session_tickets off;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

关于上述指令,有几点说明:

  • listen 443 ssl; 在 443 端口上启用 TLS。旧版的 ssl on; 指令已在 NGINX 1.25 中被移除,不应出现在现代配置中。
  • http2 on; 作为独立指令启用 HTTP/2(NGINX 1.25.1 及更高版本)。旧版配置使用 listen 443 ssl http2;,虽然仍可正常工作,但已被弃用。
  • ssl_protocols TLSv1.2 TLSv1.3; 禁用了过时的 TLS 1.0 和 1.1。从 NGINX 1.27.3 起,即使省略该指令,这也是默认设置,但显式设置是更清晰、更便于审计的做法。
  • 该密码套件列表与 Mozilla 的 “intermediate” 配置文件相匹配,可在所有较新的客户端上正常工作。如果您只需要支持 TLS 1.3 的客户端,可以完全省略 ssl_ciphers。

步骤 3:将 HTTP 重定向到 HTTPS

在 80 端口添加一个单独的 server 块,将所有请求永久重定向到 HTTPS,这样通过普通 HTTP 访问的访客也会进入安全网址:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

使用 return 301 比基于正则表达式的 rewrite 规则更快、更安全,也是 NGINX 官方推荐的做法。

步骤 4:测试配置并重新加载 NGINX

在重新加载之前,请务必先验证配置,以免拼写错误导致服务下线:

sudo nginx -t

您应该会看到 syntax is ok 和 test is successful。如果报告了错误,消息中会包含文件名和行号;修正后请再次运行测试。测试通过后,重新加载 NGINX,使其应用新配置而不中断现有连接:

sudo systemctl reload nginx

在没有 systemd 的系统上,请改用 NGINX 自身的重新加载信号:

sudo nginx -s reload

请优先使用 reload 而非 restart:reload 会在不关闭现有连接的情况下重新读取配置,而 restart 会中断这些连接。

步骤 5(可选):启用 OCSP 装订

OCSP 装订让 NGINX 在证书旁附带一份最新的、经过签名的吊销状态信息,这样客户端就无需在每次握手时都联系 CA。请在您的 HTTPS server 块中添加以下内容:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/ssl-bundle.crt;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

再次使用 sudo systemctl reload nginx 重新加载 NGINX。装订是一项虽小但很值得实施的加固措施,大多数现代证书都默认支持它。

验证安装

在浏览器中通过 https:// 打开您的网站,检查锁形图标是否已关闭,且证书与您的域名相匹配。然后使用我们的SSL Checker进行更深入的扫描,即时获取有关证书、证书链以及您服务器所提供的协议和密码套件的报告。若结果显示为绿色,则意味着各大主流平台上的客户端(包括移动端和 API 客户端)都将信任该证书。

常见问题

在 NGINX 上应该把 SSL 证书安装在哪里?

NGINX 本身并不要求特定的目录,但大多数管理员会将证书和密钥保存在 /etc/ssl/ 或 /etc/nginx/ssl/ 下。然后在您的 server 块中通过 ssl_certificate(指向合并后的证书 + 中间证书文件)和 ssl_certificate_key(指向私钥)来引用它们。

为什么我的证书在 Chrome 中被信任,但在移动端或 API 客户端上却不被信任?

几乎总是因为缺少中间证书链。桌面浏览器可以自行获取缺失的中间证书(即 “AIA 获取”),但 Android、iOS 以及大多数命令行和编程语言的 HTTP 客户端无法做到这一点。请重新构建您的 fullchain 文件,使其包含服务器证书以及所有中间证书,然后将 ssl_certificate 指向该合并文件,重新加载 NGINX,并重新运行 SSL Checker。

编辑 NGINX 配置后,应该使用 restart 还是 reload?

使用 reload。sudo systemctl reload nginx(或 sudo nginx -s reload)会重新读取配置并平滑地替换工作进程,因此现有连接不会中断。完全重启会先停止再启动服务,配置更改时很少需要这样做。请务必先运行 sudo nginx -t,以便在重新加载前发现语法错误。

我的 server 块中还需要 ssl on; 吗?

不需要。独立的 ssl on; 指令已在 NGINX 1.15.0 中被弃用,并在 1.25 版本中被完全移除。在任何受支持的 NGINX 版本中,您应改用在 listen 行中添加 listen 443 ssl; 来启用 TLS。如果您复制的是旧版配置,请删除其中任何 ssl on; 这一行。

如何在 NGINX 上启用 HTTP/2(以及 HTTP/3)?

在您的 HTTPS server 块中使用专用的 http2 on; 指令(NGINX 1.25.1 及更高版本)。旧版语法将 http2 作为 listen 行的参数添加,虽然仍可正常工作,但已被弃用。HTTP/3(QUIC)自 NGINX 1.25 起得到支持,需要通过单独的 UDP 监听器(listen 443 quic reuseport;)加上 Alt-Svc 响应头来启用;它是可选的,可以在您网站上的 HTTP/2 稳定运行后再添加。

我需要多久更新一次证书?

截至 2026 年 3 月 15 日,受公开信任的 SSL/TLS 证书有效期上限为 200 天,CA/Browser Forum 已计划进一步缩短该期限(2027 年缩短至 100 天,2029 年缩短至 47 天)。请计划在每次到期前充分提前重复上述步骤,或使用 ACME 实现续期自动化。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.