服务器名称

概述

服务器名称用于定义虚拟服务器的主机名。

服务器名称原理: 服务器名称用于定义虚拟服务器的主机名,Nginx 根据请求的 Host 头选择虚拟服务器。当 Nginx 收到一个请求时,会根据请求的 Host 头选择匹配的服务器名称。

服务器名称优势

  • 虚拟主机:可以在同一台物理服务器上运行多个网站
  • 灵活配置:可以为每个虚拟服务器配置不同的参数
  • 易于管理:可以为每个虚拟服务器配置不同的日志和错误页面

基本配置

server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

基本配置说明

  • server_name example.org www.example.org:指定服务器名称为 example.orgwww.example.org

基本配置原理server_name 指令用于指定服务器名称,可以指定多个服务器名称,用空格分隔。Nginx 会根据请求的 Host 头选择匹配的服务器名称。

命名规则

服务器名称可以分为以下几类:

  1. 精确名称:精确匹配的服务器名称,如 example.orgwww.example.org
  2. 通配符名称:使用通配符 * 匹配的服务器名称,如 *.example.orgwww.example.*
  3. 正则表达式名称:使用正则表达式匹配的服务器名称,如 ~^(?<user>.+)\.example\.net$

命名规则原理: Nginx 支持多种命名规则,可以根据需求选择合适的命名规则。精确名称的优先级最高,通配符名称的优先级次之,正则表达式名称的优先级最低。

服务器名称匹配顺序

Nginx 按照以下顺序匹配服务器名称:

  1. 精确匹配:精确匹配的服务器名称,如 example.orgwww.example.org
  2. 通配符匹配(以 * 开头):以 * 开头的通配符名称,如 *.example.org
  3. 通配符匹配(以 * 结尾):以 * 结尾的通配符名称,如 www.example.*
  4. 正则表达式匹配:正则表达式名称,如 ~^(?<user>.+)\.example\.net$

服务器名称匹配顺序原理: Nginx 按照精确匹配、通配符匹配(以 * 开头)、通配符匹配(以 * 结尾)、正则表达式匹配的顺序匹配服务器名称。

服务器名称捕获组

正则表达式名称可以使用捕获组,捕获组可以在配置中使用:

server {
    listen      80;
    server_name ~^(?<user>.+)\.example\.net$;

    location / {
        root /data/$user;
    }
}

服务器名称捕获组说明

  • (?<user>.+):正则表达式捕获组,捕获用户名
  • $user:使用捕获的用户名

服务器名称捕获组原理: 正则表达式捕获组用于提取服务器名称中的信息,可以在配置中使用。

服务器名称缺失

如果请求的 Host 头不匹配任何服务器名称,Nginx 会使用默认服务器处理请求:

server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}

服务器名称缺失说明

  • default_server:指定默认服务器

服务器名称缺失原理: 当 Nginx 收到一个请求时,如果请求的 Host 头不匹配任何服务器名称,会使用默认服务器处理请求。

服务器名称大小写

服务器名称匹配是不区分大小写的:

server {
    listen      80;
    server_name example.org;
    ...
}

服务器名称大小写说明

  • example.org:匹配 Example.OrgEXAMPLE.ORG

服务器名称大小写原理: 服务器名称匹配是不区分大小写的,Nginx 会将服务器名称转换为小写后进行匹配。