Nginx server_name 配置说明

发布于:2025-06-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

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。匹配顺序如下:

  1. 精确匹配example.com 仅匹配 Host: example.com
  2. 通配符匹配*.example.com 匹配 blog.example.comapi.example.com 等。
  3. 正则表达式匹配:使用 ~ 表示正则匹配,~* 表示忽略大小写的正则匹配。
  4. 默认服务器:如果没有匹配的 server 块,则使用默认服务器。

4. 通配符匹配

  • *.example.com 匹配所有子域名,但不能作为首字符。
  • 例如:*.example.com 匹配 blog.example.com,但不匹配 example.com

5. 正则表达式匹配

使用正则表达式定义复杂的匹配规则:

server_name ~^www\.example\.com$;
  • ~ 表示正则匹配。
  • ~* 表示忽略大小写的正则匹配。

6. 默认服务器

默认服务器在以下情况下被使用:

  1. 未指定 server_nameserver

    server {
        listen 80;
        # 没有 server_name 指令
    }
    
  2. server_name _;

    server {
        listen 80;
        server_name _;
    }
    
  3. server_name 设置为 defaultdefault_server

    server {
        listen 80 default_server;
        server_name example.com;
    }
    

7. 匹配优先级

Nginx 的 server_name 匹配遵循以下优先级顺序(从高到低):

  1. 精确匹配
  2. 通配符匹配(如 *.example.com
  3. 正则表达式匹配
  4. 默认服务器

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 官方文档