当前位置:首页 > 服务器技术 > 正文

Nginx虚拟主机优先级详解(小白也能看懂的完整教程)

在使用 Nginx 搭建多个网站时,我们经常会用到“虚拟主机”(Virtual Host)功能。但你是否遇到过这样的问题:明明配置了多个站点,访问某个域名时却打开了错误的网站?这很可能是因为你没有理解 Nginx 虚拟主机优先级 的匹配规则。

Nginx虚拟主机优先级详解(小白也能看懂的完整教程) Nginx虚拟主机优先级 Nginx配置教程 虚拟主机匹配规则 Web服务器配置 第1张

什么是 Nginx 虚拟主机?

虚拟主机是指在一台服务器上运行多个网站的技术。Nginx 通过 server 块来定义不同的虚拟主机,每个 server 块可以监听不同的域名、IP 或端口。

Nginx 虚拟主机的匹配优先级规则

Nginx 在收到一个 HTTP 请求时,会按照以下顺序决定使用哪个 server 块来处理请求:

  1. 精确匹配:如果 server_name 中有与请求 Host 完全一致的域名(例如 example.com),则优先使用该 server 块。
  2. 通配符匹配(左侧):如 *.example.com,匹配所有子域名。
  3. 通配符匹配(右侧):如 www.example.*,较少使用。
  4. 正则表达式匹配:以 ~ 开头的 server_name,例如 ~^www\.(.+)$
  5. 默认 server 块:如果没有匹配成功,Nginx 会选择第一个定义的 server 块(或显式标记为 default_server 的块)作为兜底。

实战配置示例

下面是一个典型的 Nginx 配置文件片段,展示了不同优先级的虚拟主机:

# 默认 server(兜底)server {    listen 80 default_server;    server_name _;    return 444; # 直接关闭连接}# 精确匹配server {    listen 80;    server_name example.com;    root /var/www/example;}# 通配符匹配(左侧)server {    listen 80;    server_name *.example.com;    root /var/www/subs;}# 正则匹配server {    listen 80;    server_name ~^(?.+)\.test\.com$;    root /var/www/test/$subdomain;}

在这个例子中:

  • 访问 example.com → 使用第二个 server(精确匹配)
  • 访问 blog.example.com → 使用第三个 server(通配符匹配)
  • 访问 api.test.com → 使用第四个 server(正则匹配)
  • 访问任意未配置的域名(如 unknown.com)→ 使用第一个 server(default_server

常见误区与建议

很多初学者会忽略 default_server 的作用,导致未预期的站点被加载。强烈建议:

  • 始终设置一个明确的 default_server,用于拦截非法请求。
  • 避免依赖“第一个 server 块自动成为默认”的行为,显式声明更安全。
  • 测试配置后使用 nginx -t 检查语法,并重载服务:systemctl reload nginx

总结

掌握 Nginx 虚拟主机优先级 是搭建多站点 Web 服务器的基础。通过理解匹配顺序(精确 → 通配符 → 正则 → 默认),你可以精准控制每个域名的访问行为,避免安全和配置错误。

希望这篇 Nginx配置教程 能帮助你彻底搞懂 虚拟主机匹配规则,轻松完成 Web服务器配置