必须分三步验证:先用nginx -t确认语法合法且输出“test is successful”,再用nginx -T | grep "server_name"核验多域名是否完整解析;接着curl -H "Host: domain"模拟请求验证HTTP层路由;最后通过真实访问和openssl检查HTTPS证书覆盖范围。

直接在 Nginx 配置中写好多个域名后,不能只靠 reload 就算完事——必须分三步验证:语法是否合法、HTTP 层是否命中、真实请求是否可达。
第一步:检查配置语法和 server_name 解析逻辑
运行 nginx -t 确认无语法错误。重点看输出里是否提示 “test is successful”,否则配置未加载成功。
再用 nginx -T | grep "server_name"(注意大写 T)查看实际生效的 server_name 行,确认空格分隔的多个域名被完整读取,没有被截断或误解析为单个字符串(比如出现引号、逗号或换行就会失败)。
第二步:用 curl 模拟 Host 头验证 HTTP 层匹配
不依赖 DNS,直接用 IP + 自定义 Host 请求,判断 Nginx 是否按预期路由:
- curl -H "Host: example.com" http://your-server-ip/
- curl -H "Host: www.example.com" http://your-server-ip/
- curl -H "Host: demo.example.org" http://your-server-ip/
观察返回内容、状态码、响应头(如 X-Host 或自定义 header)是否一致;若某域名返回 404 或跳转异常,说明 $host 变量没取到,或该域名未出现在 server_name 列表中。
第三步:真实域名访问与 HTTPS 专项验证
DNS 解析到位后,用浏览器或 curl 访问各域名:
- HTTP 域名:检查是否正常返回页面,日志中 $host 字段是否正确记录对应域名
- HTTPS 域名:重点看浏览器地址栏是否显示“安全”图标,点击锁形图标确认证书 SAN 列表是否包含所有域名(缺一个就会报证书错误)
- 用 openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -text | grep -A1 "Subject Alternative Name" 直接查证书实际覆盖范围
如果只有首个域名能过 TLS 握手,其余提示证书无效,问题一定出在证书未覆盖全部 server_name 域名,而非 Nginx 配置本身。


















