最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx server 配置中多个不同域名的 server_name 优先级如何算
时间:2026-08-15 12:39:48 编辑:袖梨 来源:一聚教程网
Nginx server_name匹配优先级为:1.精确匹配(最高),2.最长前缀/后缀通配符,3.正则匹配(需~或~*开头),4. default_server兜底;未匹配时按显式default_server或同端口首个server块处理。
多个不同域名的 server_name 优先级,不是看谁写在前面,而是按匹配类型分层比对,命中即停。
精确匹配永远最高优先级
只要 Host 头和 server_name 字符串完全一致(大小写不敏感,忽略端口),就直接选中该 server 块。比如:
-
server_name api.example.com;→ 只响应Host: api.example.com -
server_name example.com www.example.com;→ 任一匹配都走这个块,但api.example.com不在此列 - 哪怕你把
*.example.com写在上面,api.example.com仍会优先匹配精确项
通配符分两类,前缀优先于后缀
当没有精确匹配时,Nginx 会找“最长”的通配符规则:
-
前缀通配符:如
*.example.com,匹配shop.example.com、blog.example.com,但不匹配example.com或dev.shop.example.com -
后缀通配符:如
example.*(Nginx ≥1.11.10),匹配example.org、example.net,但不匹配www.example.com - 若同时存在
*.example.com和*.shop.example.com,后者更长,backend.shop.example.com会命中它
正则匹配最后兜底,性能最低
只有前面两类都没命中,才会执行正则。注意写法必须规范:
- 必须以
~(区分大小写)或~*(不区分)开头 - 含特殊字符时建议加引号,例如:
server_name ~^([a-z0-9_-]+).example.com$; - 错误写法如
^www.example.com$(缺波浪线)会被当作文本匹配,无法生效
没匹配上怎么办?default_server 是关键
所有匹配都失败时,Nginx 会按以下顺序 fallback:
- 显式声明了
listen 80 default_server;的那个 server 块 - 没设
default_server,就用监听同一端口的第一个 server 块(隐式 default) - IP 直接访问、Host 头为空、或 Host 值非法时,也走这条路
生产环境强烈建议显式配置 default_server,避免意外路由到错误站点。
相关文章
- 胜利女神新的希望新手如何入门 08-15
- 《重返未来:1999》梁月养成攻略 08-15
- 战舰联盟环球竞技场中哪个战列舰好 08-15
- 《异环》好狗狗走四方介绍 08-15
- 伊莫试炼迷宫是什么 08-15
- 原神akt资源网页入口-akt原神网站入口链接地址 08-15