NGINX 中 SERVER 的匹配顺序

本文介绍了Nginx处理HTTP请求时如何通过Host头部信息与server_name进行匹配以确定请求处理方式的过程。详细阐述了匹配优先级:完全匹配、通配符匹配、正则表达式匹配等,并解释了当没有匹配项时的默认处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。

server_name与host匹配优先级如下:

1、完全匹配
2、通配符在前的,如*.test.com
3、在后的,如www.test.*
4、正则匹配,如~^\.www\.test\.com$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、找到匹配listen端口的第一个server块

### Nginx 中 `server_name` 的正确配置 #### 1. 基本概念 `server_name` 是 Nginx 配置中的一个重要指令,用于定义虚拟主机所对应的域名或 IP 地址。通过该指令可以实现基于名称的虚拟主机功能,使得多个站点可以在同一台服务器上运行[^1]。 --- #### 2. 配置方式 `server_name` 支持多种匹配方式,主要包括以下三类: - **精确匹配** 使用具体的域名作为 `server_name` 参数值。例如: ```nginx server { listen 80; server_name www.example.com; } ``` 这种方式适用于单个特定域名的场景[^3]。 - **通配符匹配** 可以使用前缀通配符(*)来匹配一组类似的域名。例如: ```nginx server { listen 80; server_name *.example.com; } ``` 上述配置会匹配所有以 `.example.com` 结尾的子域[^3]。 - **正则表达式匹配** 利用正则表达式进行灵活的域名匹配。例如: ```nginx server { listen 80; server_name ~^(www\.)?(.+)\.com$; } ``` 正则表达式的优先级高于其他两种匹配方式,并且需要以 `~` 开头表示启用正则模式[^3]。 --- #### 3. 处理请求时的匹配顺序 当客户端发起请求时,Nginx 会按照以下顺序尝试匹配 `server_name`: 1. 精确匹配; 2. 通配符匹配(从前到后依次检查); 3. 正则表达式匹配(按配置顺序逐一测试)。 如果以上均未找到匹配项,则默认返回第一个监听相同端口的虚拟主机配置[^2]。 --- #### 4. 实际应用案例 假设需要为两个不同的项目分别设置独立的访问入口,可以通过如下方式进行配置: ```nginx # 主站配置 server { listen 80; server_name example.com; location / { root /var/www/example_main; index index.html; } } # 子站配置 server { listen 80; server_name sub.example.com; location / { root /var/www/sub_example; index index.html; } } ``` 此外,在某些复杂场景下还可以结合 `$host` 和 `if` 条件语句动态调整行为[^2]: ```nginx server { listen 80; if ($host = 'api.example.com') { rewrite ^/(.*)$ https://new-api.example.com/$1 permanent; } server_name example.com api.example.com; } ``` --- #### 5. 注意事项 - 如果存在多个 `server_name` 定义在同一块配置中,应确保它们之间无冲突并合理规划优先级。 - 对于 HTTPS 请求,请记得同时更新 SSL/TLS 相关证书绑定至对应域名。 - 尽量减少不必要的正则表达式使用以免影响性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值