$host
在 NGINX 中,$host 变量保存来自 HTTP 请求头的主机名,或配置中定义的服务器名称。 — NGINX Core (HTTP)
说明
当处理传入请求时,$host 变量非常关键,因为它直接从 Host 请求头或 NGINX 配置中相应配置的服务器名称中提取主机名。当有请求到来时,NGINX 会检查 Host 头;如果存在,则使用该头的值来设置 $host 变量。如果该头不存在,NGINX 则回退到使用处理该请求的 server block 中配置的服务器名称。此行为允许 NGINX 对指向同一服务器实例的不同域名或子域名的请求做出适当响应。 该变量通常被赋值为与客户端访问的域名或 IP 地址相对应的值。例如,如果用户请求 "http://example.com/path",那么 $host 变量将包含 "example.com"。如果请求未指定主机名且 server block 已定义默认服务器,则 $host 将保存该服务器的名称。需要注意,如果 NGINX 针对不同主机名配置了多个 server block,则 $host 的值对于基于传入 URL 将请求路由到正确的块非常关键。 $host 变量在 server_name 指令存在与否时也可能表现不同。如果配置在某个 server block 中的服务器名称包含通配符或正则,则 $host 的实际值可能会受处理请求时找到的具体匹配结果影响。这确保了请求能够基于特定主机名被正确服务,从而在单个 NGINX 服务器实例上实现多租户配置。
配置示例
server {
listen 80;
server_name example.com;
location / {
return 200 "Host is: $host";
}
}子系统
http可缓存
是上下文
http, server, location, if如果客户端未发送 Host header,$host 变量可能不会按预期工作,可能会影响路由。
确保包含所需 server_name 的 server block 已正确配置,否则你可能会得到 $host 的意外值。