server_name_in_redirect
server_name_in_redirect 指令控制在重定向中是否包含服务器名称。
NGINX HTTP Core
·
httpserverlocation
语法server_name_in_redirect on | off;
默认值off
上下文http, server, location
参数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,以避免出现意外结果。