add_header重写的坑

427 阅读1分钟

问题描述:

nginx 的 add_header 配置在很多文档中都标注为: “可以覆盖响应头” ,然而并没有说出使用场景,导致不少开发人员在使用 add_header 时都出现了错误:add_header 根本没有重写响应头!


add_header 的正确使用场景:

add_header 配置可以重写响应头,但是必须满足以下条件:

  • 重写的响应头不能是诸如 Content-LengthContent-TypeDateServer 等具有特殊含义的头部。根据 HTTP 规范,Nginx 会默认忽略对这些响应头的重写。

  • 重写的响应头必须是父结构中已定义的响应头。如:下面配置中,首先在父结构体中定义了响应头X-Cache = $upstream_cache_status,然后在子结构体中又定义了响应头 X-Cache = "123",如此一来子结构体的 X-Cache 响应头就会覆盖父结构体的响应头,结果见下图:

    add_header X-Cache $upstream_cache_status;
    
    location /test{
    	default_type text/html;
     	add_header X-Cache "123";
     	return 200 "测试";
    }
    

    add_header重写的坑