最简单有效的测试方式是用curl指定Host头绕过DNS直击Nginx路由逻辑:1. curl -H "Host: test-dev.example.com" http://127.0.0.1:8081应命中开发配置;2. curl -H "Host: test-qa.example.com" http://127.0.0.1:8082应命中测试配置;3. curl -H "Host: unknown-site.local" http://127.0.0.1:8081若无泛匹配应返回404或默认server;需验证default_server设置、日志分离、响应头标识及server_name匹配优先级(精确>前缀通配>后缀通配>正则)。

直接用 curl 指定 Host 头发起请求,是最简单有效的测试方式。关键不是看域名能不能解析,而是验证 Nginx 是否按 server_name 正确路由到对应 server 块。
用 curl 模拟不同域名请求
在本地或测试机执行以下命令,绕过 DNS 解析,直击 Nginx 的匹配逻辑:
-
curl -H "Host: test-dev.example.com" http://127.0.0.1:8081→ 应命中开发环境配置 -
curl -H "Host: test-qa.example.com" http://127.0.0.1:8082→ 应命中测试环境配置 -
curl -H "Host: unknown-site.local" http://127.0.0.1:8081→ 若无泛匹配,应返回 404 或默认 server
检查默认 server 和 fallback 行为
Nginx 总会有一个“默认” server 块(通常是配置文件中第一个 listen 相同端口的块)。测试时需确认:
- 未匹配任何
server_name的请求是否落入预期的默认站点 - 配置中显式设置
default_server参数可明确指定:例如listen 8081 default_server; - 避免仅靠顺序隐式依赖,默认行为易被后续配置变更打破
验证日志与响应头差异
在各 server 块中加入差异化标识,便于快速识别路由结果:
- 在
location /中返回不同index.html,内容含环境名(如 “DEV ENV”、“QA ENV”) - 添加自定义响应头:
add_header X-Server-ID "dev-vhost";,再用curl -I查看 - 启用 access_log 并为每个 server 指定独立日志路径,观察哪条日志有记录
注意通配符与优先级陷阱
server_name 匹配有严格优先级:精确匹配 > 最长通配符前缀(*.example.com)> 最长通配符后缀(www.example.*)> 正则匹配。测试时建议:
- 用
nginx -t确认语法正确,再nginx -s reload - 临时在配置中加入
error_log /var/log/nginx/debug.log notice;,开启 notice 级别日志可看到匹配过程 - 避免同时使用
www.example.com和*.example.com导致意外交替命中











