$server_name

$server_name 变量表示提供该请求的虚拟主机的名称。 — NGINX Core (HTTP)

$server_name NGINX Core (HTTP)

说明

NGINX 中的 $server_name 变量会自动填充为配置中 server block 定义的名称。它可以匹配传入请求的 Host header,或者在 server block 中显式设置。$server_name 的值取决于 server block 的定义;它可以采用多种形式,包括单个名称、wildcard 或 regular expression。如果请求未匹配配置中定义的任何 server blocks,则 $server_name 将未被设置。 该变量通常用于日志记录、错误页面和 rewrite directives,使服务器能够根据请求的主机动态定制响应。当在单个 server block 中为多个 server names 配置时,NGINX 会执行简单的匹配过程,优先选择精确匹配,而不是 wildcards 或 regular expressions。 要有效使用 $server_name 变量,必须正确配置 server block,并确保其与传入请求相匹配。该变量也可以在日志中访问,以提供关于正在处理的请求的上下文,从而有助于调试和分析。

配置示例

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        root /var/www/example;
        index index.html;
    }

    error_page 404 /404.html;
    access_log /var/log/nginx/example.access.log;
    error_log /var/log/nginx/example.error.log;
}

子系统

http

可缓存

上下文

http, server, location, if

如果对某个请求找不到匹配的 server block,$server_name 将保持未设置,这可能会在日志或重定向中导致混淆。

避免在可能被 server blocks 中的 regex 或 wildcard 定义影响的 locations 中使用 $server_name,因为结果可能会不一致。

请记住,www 或 subdomains 的存在需要在 server_name 中准确反映,以确保正确的行为。