nginx之server_name配置

Nginx虚拟主机配置详解
本文详细介绍了Nginx中虚拟主机的配置方法及匹配顺序。从准确的server_name匹配到正则表达式匹配,全面解析了如何通过不同的server_name设置实现灵活的虚拟主机配置。
server_name 指定虚拟主机的域名或者IP

nginx匹配虚拟主机顺序如下:
1、准确的server_name匹配,例如:
server {
     listen       80;
     server_name  domain.com  www.domain.com;
     ...
}

2、以*通配符开始的字符串:
server {
     listen       80;
     server_name  *.domain.com;
     ...
}

3、以*通配符结束的字符串:
server {
     listen       80;
     server_name  www.*;
     ...
}

4、匹配正则表达式:

server {
     listen       80;
     server_name  ~^(?.+)\.domain\.com$;
     ...
}
### 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、付费专栏及课程。

余额充值