Nginx 中如何为二级域名设定独立的 SSL 证书路径

作者:袖梨 2026-07-15
核心是为每个二级域名创建独立server块并严格绑定专属SSL证书路径;需先确保DNS解析生效,再分别配置HTTP重定向与HTTPS服务块,证书路径唯一、私钥权限设为600,最后通过nginx -t验证并reload生效。

为二级域名配置独立的 SSL 证书路径,核心是让每个 server 块精准绑定对应域名,并指向专属证书文件。Nginx 不支持通配符证书自动匹配所有二级域名(除非用泛域名证书),所以不同二级域名必须各自指定证书路径。

确认 DNS 解析已生效

二级域名(如 api.example.comadmin.example.com)必须先在 DNS 中正确解析到服务器公网 IP。可用以下命令验证:

  • dig api.example.com +shortnslookup admin.example.com
  • 返回值应为你的 Nginx 服务器 IP
  • 若未生效,请检查 TTL 设置并等待缓存刷新(通常几分钟至几小时)

为每个二级域名创建独立 server 块

不建议混用多个域名共用一个 server 块。推荐为每个二级域名新建配置文件(如 /etc/nginx/conf.d/api.example.com.conf),结构如下:

  • HTTP 重定向块(监听 80 端口):server_name api.example.com; + return 301 https://$host$request_uri;
  • HTTPS 服务块(监听 443 端口):server_name api.example.com;,且只写这一行域名,不加其他
  • ssl_certificatessl_certificate_key 必须明确指向该域名专用证书路径,例如:
    ssl_certificate /etc/nginx/ssl/api.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/api.example.com.key;

证书文件路径与权限管理

证书文件需满足两个硬性要求:

  • 路径唯一且可读:每个二级域名证书应存放在独立子目录或带域名前缀的文件名中,避免混淆(如 /etc/nginx/ssl/admin.example.com/ 下放 fullchain.pemprivkey.pem
  • Nginx 进程有读取权限:执行 sudo chown root:root /etc/nginx/ssl/*sudo chmod 600 /etc/nginx/ssl/*.key,私钥严禁设为全局可读
  • 证书内容需完整:.crt 或 .pem 文件应包含服务器证书 + 中间证书(如 Let’s Encrypt 的 fullchain.pem),不能只放根证书

验证与热加载

配置完成后务必逐项检查:

  • 运行 sudo nginx -t:确保语法无误,且所有 ssl_certificate 路径真实存在、可访问
  • 检查日志:sudo tail -f /var/log/nginx/error.log,关注是否报 SSL_CTX_use_certificate_chain_file() failed 类错误
  • 重载配置:sudo systemctl reload nginx(不中断连接)
  • 浏览器访问 https://api.example.com,点击地址栏锁图标确认证书显示的是该域名,而非其他二级域名或主域名

相关文章

精彩推荐