server_name 是 Nginx 配置中用于指定虚拟主机的主机名或域名。它决定了哪个 server 块将处理特定的请求。以下是详细说明及案例:

1. 基本语法

server_name name1 name2 name3 ...;
  • name1, name2, name3 等可以是域名、IP 地址或通配符。

2. 匹配规则

  • 精确匹配server_name 与请求的 Host 头完全匹配。

  • 通配符匹配

    • 前缀通配符:*.example.com 匹配 a.example.comb.example.com 等。

    • 后缀通配符:example.* 匹配 example.comexample.net 等。

  • 正则表达式匹配:以 ~ 开头,如 ~^www\d+\.example\.com$ 匹配 www1.example.comwww2.example.com 等。

3. 默认服务器

  • 如果没有匹配的 server_name,Nginx 会使用第一个 server 块作为默认服务器。

  • 可以通过 default_server 参数显式指定默认服务器:

    listen 80 default_server;
    server_name _;

4. 案例

案例 1:精确匹配

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
    index index.html;
}
  • 该配置处理 example.comwww.example.com 的请求。

案例 2:通配符匹配

server {
    listen 80;
    server_name *.example.com;
    root /var/www/wildcard;
    index index.html;
}
  • 该配置处理所有子域名(如 a.example.comb.example.com)的请求。

案例 3:正则表达式匹配

server {
    listen 80;
    server_name ~^www\d+\.example\.com$;
    root /var/www/regex;
    index index.html;
}
  • 该配置处理 www1.example.comwww2.example.com 等请求。

案例 4:默认服务器

server {
    listen 80 default_server;
    server_name _;
    root /var/www/default;
    index index.html;
}
  • 该配置作为默认服务器处理所有未匹配的请求。

5. 优先级

  • 精确匹配 > 最长前缀通配符 > 最长后缀通配符 > 正则表达式匹配 > 默认服务器。

6. 注意事项

  • 多个 server_name 之间用空格分隔。

  • 正则表达式匹配需要以 ~ 开头。

  • server_name 可以包含 IP 地址,但不推荐。

通过合理配置 server_name,可以实现多域名、多子域名的虚拟主机管理。

本篇文章内容来源于:Nginxserver_name 配置主机名称详细说明以及案例