server_name_in_redirect
server_name_in_redirect 指令控制在重定向中是否包含服务器名称。 — NGINX HTTP Core
server_name_in_redirect
httpserverlocation
语法server_name_in_redirect on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag
说明
当启用时,server_name_in_redirect 指令会改变 NGINX 在生成重定向(例如 HTTP 301 或 302 响应)以应对服务器处理的请求时的行为。具体来说,它决定重定向 URL 是否包含 server block 配置中指定的 `server_name`。默认情况下,当发生重定向时,NGINX 可能使用请求中的 `Host` 头来构建重定向 URL,但启用此指令后会强制 NGINX 改用 `server_name`。 当 NGINX 服务器承载多个域名(即虚拟主机)时,此指令尤其有用,能够确保重定向始终反映某个特定域名。例如,如果收到针对 `example.com` 的请求,但配置为重定向到 `www.example.com`,将 `server_name_in_redirect` 设置为 `on` 可以确保所有重定向一致地使用 `www.example.com`。该指令接受一个标志,取值可以为 `on`(启用此行为)或 `off`(禁用),从而便于在不同上下文(例如 http、server 和 location 块)中进行灵活配置。
配置示例
server {
listen 80;
server_name example.com www.example.com;
server_name_in_redirect on;
location / {
return 301 https://www.example.com$request_uri;
}
}⚠
忘记在适当的上下文中设置此指令可能导致重定向行为不一致。
⚠
如果使用多个 server 块,确保每个都设置了正确的 `server_name`,以避免出现意外结果。