Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是
server块中的server_name指令。server_name决定了 Nginx 如何根据客户端请求的Host头匹配对应的虚拟主机(Virtual Host)。
1. 简介
Nginx 使用 server_name 指令来确定哪个 server 块处理请求。该指令的值可以是域名、IP 地址、通配符或正则表达式。
2. 语法
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/html;
index index.html;
}
}
server_name的值可以是多个域名,用空格分隔。- 如果未指定
server_name,则默认使用server块的监听地址。
3. 匹配规则
Nginx 根据请求的 Host 头匹配 server_name。匹配顺序如下:
- 精确匹配:
example.com仅匹配Host: example.com。 - 通配符匹配:
*.example.com匹配blog.example.com、api.example.com等。 - 正则表达式匹配:使用
~表示正则匹配,~*表示忽略大小写的正则匹配。 - 默认服务器:如果没有匹配的
server块,则使用默认服务器。
4. 通配符匹配
*.example.com匹配所有子域名,但不能作为首字符。- 例如:
*.example.com匹配blog.example.com,但不匹配example.com。
5. 正则表达式匹配
使用正则表达式定义复杂的匹配规则:
server_name ~^www\.example\.com$;
~表示正则匹配。~*表示忽略大小写的正则匹配。
6. 默认服务器
默认服务器在以下情况下被使用:
-
未指定
server_name的server块:server { listen 80; # 没有 server_name 指令 } -
server_name _;:server { listen 80; server_name _; } -
server_name设置为default或default_server:server { listen 80 default_server; server_name example.com; }
7. 匹配优先级
Nginx 的 server_name 匹配遵循以下优先级顺序(从高到低):
- 精确匹配
- 通配符匹配(如
*.example.com) - 正则表达式匹配
- 默认服务器
8. 实例
多域名支持
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/html;
index index.html;
}
}
子域名处理
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
location / {
root /var/www/$subdomain;
index index.html;
}
}
默认服务器配置
server {
listen 80 default_server;
server_name _;
location / {
return 403;
}
}
9. 注意事项
- 大小写敏感性:
server_name默认区分大小写,可通过server_name_in_redirect off;关闭。 - 性能优化:避免使用复杂的正则表达式,优先使用通配符或精确匹配。
- 测试配置:修改配置后,使用
nginx -t测试配置是否正确。 - 日志排查:配置未生效时,检查
/var/log/nginx/error.log。
10. 总结
Nginx 的 server_name 配置是虚拟主机管理的核心。通过精确匹配、通配符和正则表达式,可以灵活应对多域名、子域名和默认服务器的需求。掌握匹配优先级规则和实际应用技巧,能显著提升 Nginx 的配置效率和稳定性。
参考:Nginx 官方文档


![[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)](https://i-blog.csdnimg.cn/direct/4d4c7839d80d427f8e7c008410ac0a2d.png)
















