最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 主配置文件中定义了多个 server 块时默认选择哪一个
时间:2026-08-17 12:04:49 编辑:袖梨 来源:一聚教程网
Nginx按优先级选择server块:完全匹配>通配符前缀>通配符后缀>正则匹配(按配置顺序取首个成功),未命中时启用显式default_server,否则取同端口第一个server块。
Nginx 在多个 server 块中选择匹配项,不依赖定义顺序,也不默认选第一个,而是依据一套明确的匹配优先级规则。核心逻辑是:先筛选出所有可能匹配的 server 块,再从中选出最精确匹配的那个。
server_name 匹配优先级决定最终选择
Nginx 会按以下顺序逐级比对 server_name 指令(注意:端口和协议也参与初始筛选,但 server_name 是关键区分字段):
- 完全匹配(如
server_name example.com;→ 请求 Host:example.com) - 通配符前缀匹配(如
server_name *.example.com;→ 匹配www.example.com,但不匹配example.com或sub.www.example.com) - 通配符后缀匹配(如
server_name www.*;→ 匹配www.test,但不匹配test.www) - 正则表达式匹配(以
~或~*开头,区分大小写/不区分大小写)——正则匹配在所有文字匹配之后执行,且按配置文件中出现顺序取第一个成功匹配
如果以上都未命中,Nginx 会 fallback 到 默认 server:
- 显式标记为
default_server的server块(在listen指令后加default_server,例如listen 80 default_server;) - 若无显式
default_server,则取同一监听地址+端口下第一个出现的server块(这是唯一依赖定义顺序的情形,仅用于兜底)
同一 listen 指令下的 server 块才参与竞争
不同 listen 配置(如 listen 80; 和 listen 443 ssl;)互不影响。只有监听相同 IP:Port(及相同协议、ssl 标志等)的 server 块才会被纳入本次请求的匹配池。
例如:
server { listen 80; server_name a.com; }server { listen 80 default_server; server_name b.com; }server { listen 443 ssl; server_name a.com; }
→ HTTP 请求到 80 端口时,只在前两个 server 中选;HTTPS 请求则只看第三个。
如何确保预期 server 被选中
- 明确指定
default_server,避免隐式依赖顺序 - 避免多个
server_name冲突(比如重复的完全匹配或重叠通配符) - 用
nginx -t测试配置,再用nginx -T查看实际生效的 server 块解析顺序 - 对调试有用:临时添加
return 200 "Served by: $server_namen";辅助验证实际路由目标
不复杂但容易忽略
相关文章
- Yandex引擎官网入口-Yandex网页版入口 08-17
- 华为ws5200四核版支持mesh吗(华为ws5200四核版可以用mesh吗) 08-17
- 华为路由ax6怎么设置无线桥接(华为路由ax6设置无线桥接方法) 08-17
- 消灭暴走潮 奖励自动砸进你背包 08-17
- 职教云最新登录入口-职教云官方安全入口 08-17
- 一梦江湖自定义称谓方法全解析(打造个性化称谓,让你独树一帜) 08-17