最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 证书隔离:如何配置基于 Server 块的独立 SSL 容器 使多域名证书在同一 IP 的完美并存
时间:2026-06-19 09:11:47 编辑:袖梨 来源:一聚教程网
关键在于为每个域名配置独立的server块,分别绑定专属SSL证书、精确server_name及正确路径;Nginx按SNI匹配证书,需用openssl验证-subject与servername一致,泛域名证书仅限同主域,老旧客户端无SNI时依赖default_server兜底。
要让多个域名在同一个 IP 上各自使用专属 SSL 证书,关键不是“共享配置”,而是为每个域名建一个独立的 server 块——每个块就是一套完整的 HTTPS 环境,证书、域名、监听参数全部绑定,互不干扰。
每个域名配一个独立 server 块
不能把 site-a.com 和 site-b.net 写进同一个 server 里共用证书,否则 Nginx 只会加载最后一个 ssl_certificate 指令的值,导致证书错配。必须分开写:
- 每个块都写
listen 443 ssl http2;——ssl参数不可省,否则证书不加载 -
server_name必须精确列出该证书覆盖的所有主机名,比如site-a.com www.site-a.com -
ssl_certificate和ssl_certificate_key路径必须指向该域名对应的 PEM 文件,不能复用或拼错
证书路径与域名严格一一对应
Nginx 启动时不校验证书文件是否存在或是否匹配域名,但运行时会按路径硬加载。一旦路径错误、权限不对或文件缺失,对应域名的 HTTPS 请求就会失败(常见表现为连接重置、浏览器报“证书无效”)。
- 推荐用 Certbot 分别申请:比如
certbot --nginx -d site-a.com和certbot --nginx -d site-b.net - 证书目录建议按域名隔离,例如:
/etc/nginx/ssl/site-a.com/和/etc/nginx/ssl/site-b.net/ - 泛域名证书(
*.example.com)只对同主域子域有效,无法用于other.net
处理无 SNI 的老旧请求
部分旧客户端(如 Android 4.4 以下、某些嵌入式设备)不发 SNI 字段,Nginx 会回落到第一个定义的 server 块,或显式标记的 default_server 块。
- 把最常用站点的块放在配置文件最前面,降低误配概率
- 也可显式声明兜底块:
listen 443 ssl http2 default_server; - 兜底块的
server_name _;是惯用写法,建议返回return 444;主动断连,避免提供错误证书引发警告
验证证书是否按域名正确返回
别只靠浏览器访问测试,缓存和中间件可能干扰判断。用 OpenSSL 直接测 TLS 层行为:
-
openssl s_client -connect your.ip:443 -servername site-a.com -showcerts 2>/dev/null | openssl x509 -noout -subject→ 应显示CN = site-a.com - 换
-servername site-b.net→ 应返回另一张证书的subject - 确认每张证书的 SAN 字段包含对应
server_name中所有域名(包括 www 和裸域)
相关文章
- 明末渊虚之羽版本奖励错误如何补偿 07-01
- 原神峡谷盈月之镜解谜方法 07-01
- 末日进化如何升级人物卡 07-01
- 魔兽世界卡格罗什的命运背包位置在哪 07-01
- 沙石镇时光体力恢复方法大全 沙石镇时光快速回满体力的实用技巧 07-01
- 空洞骑士寻神者篇章攻略 07-01