Nginx 中如何配置 server_name?

推荐答案

在 Nginx 中,server_name 用于指定服务器块(server block)处理的请求域名。可以通过以下方式配置 server_name

-- -------------------- ---- -------
------ -
    ------ ---
    ----------- ----------- ----------------

    -------- - -
        ---- -----------------
        ----- -----------
    -
-

在这个配置中,server_name 指定了该服务器块将处理 example.comwww.example.com 的请求。

本题详细解读

1. server_name 的基本用法

server_name 指令用于定义服务器块(server block)处理的域名。它可以包含一个或多个域名,多个域名之间用空格分隔。例如:

这个配置表示 Nginx 将处理来自 example.comwww.example.com 的请求。

2. 通配符的使用

server_name 支持通配符 *,可以匹配任意数量的字符。例如:

这个配置表示 Nginx 将处理所有以 .example.com 结尾的域名请求,如 a.example.comb.example.com 等。

3. 正则表达式的使用

server_name 还支持正则表达式,以 ~ 开头表示正则匹配。例如:

这个配置表示 Nginx 将处理所有符合 www 后跟一个或多个数字,并以 .example.com 结尾的域名请求,如 www1.example.comwww123.example.com 等。

4. 默认服务器

如果请求的域名没有匹配到任何 server_name,Nginx 会使用默认的服务器块。默认服务器块可以通过 default_server 参数指定:

-- -------------------- ---- -------
------ -
    ------ -- ---------------
    ----------- --

    -------- - -
        ---- -----------------
        ----- -----------
    -
-

在这个配置中,default_server 参数表示该服务器块是默认的,server_name _; 表示匹配所有未指定的域名。

5. 优先级

当多个服务器块匹配同一个域名时,Nginx 会按照以下优先级顺序选择服务器块:

  1. 完全匹配的域名。
  2. 最长的通配符匹配。
  3. 最长的正则表达式匹配。
  4. 默认服务器块。

6. 示例

以下是一个完整的示例,展示了如何使用 server_name 配置多个域名、通配符和正则表达式:

-- -------------------- ---- -------
------ -
    ------ ---
    ----------- ----------- ----------------

    -------- - -
        ---- -----------------
        ----- -----------
    -
-

------ -
    ------ ---
    ----------- --------------

    -------- - -
        ---- ------------------
        ----- -----------
    -
-

------ -
    ------ ---
    ----------- ------------------------

    -------- - -
        ---- ---------------
        ----- -----------
    -
-

------ -
    ------ -- ---------------
    ----------- --

    -------- - -
        ---- -----------------
        ----- -----------
    -
-

在这个示例中,Nginx 会根据请求的域名选择相应的服务器块进行处理。

纠错
反馈