$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 中准确反映,以确保正确的行为。