科技匠|nginx常见模块headers-more,set-misc( 二 )


含义:在返回响应报文前对响应头进行新增或替换操作 。
示例的意思是当响应状态码(-s参数的作用就是匹配对应的状态码)是404、500或502时 , 如果添加’Result:error’和’F:X-re’两个响应头 , 当后端服务器返回其中任何一个响应头时 , more_set_headers都会替换返回的值 。
more_set_headers -s 404 -s '500 502' 'Result:error' 'F:X-re';
科技匠|nginx常见模块headers-more,set-misc2.根据HTTP状态清除响应头
指令:more_clear_headers
语法:more_clear_headers [-t ]…[-s ]…
默认值:无
环境:http、server、location、location if
执行阶段:output-header-filter
示例:more_clear_headers -s 200 -t ‘text/plain’ F Result;
含义:在返回响应报文前清除指定的响应头 。
more_clear_headers -s 200 -t 'text/plain' F Result;more_clear_headers -s 200 -t 'X-*';示例中的意思是当响应状态码是200时清除’text/plain’、F、Result这3个响应头;如果不用-s参数(即不对状态码进行匹配) , 指定的响应头在任何状态码下都会被清除 。该指令还可以使用通配符 , 例如 , 想要清除以X-开头的响应头 , 只需使用more_clear_headers -s 200 -t 'X-*'即可 。
3.设置HTTP请求头
指令:more_set_input_headers
语法:more_set_input_headers ‘Host:testnginx.com’;
环境:http、server、location、location if
执行阶段:rewritetail
含义:当请求在rewrite阶段并执行到最后时 , 再添加一个请求头 , 该请求头将和请求一起到达下一个阶段;
示例如下:
科技匠|nginx常见模块headers-more,set-misc4.清除HTTP请求头
指令:more_clear_input_headers
语法:more_clear_input_headers -t Cache-Control;
环境:http、server、location、location if
执行阶段:rewrite tail
含义:当请求在rewrite阶段并执行到最后时 , 如果匹配到的请求头是CacheControl就清除掉 。
该指令支持通配符 , 如“more_clear_input_headers ‘Test*’;” , 指的就是以Test开头的请求头将全部被清除 。
more_clear_input_headers 'Test*';

  • 关于指令more_clear_headers清除响应头操作可以用来隐藏服务内部的一些敏感信息 , 如varnish自带的响应头 , 或者PHP框架生成的响应头等 。 在实际业务中首先要确定需要传递给客户端的响应头信息 , 而不必传递给客户端的信息则可以使用此方法进行清除 。
  • 关于指令more_set_input_headers和more_clear_input_headers ; 这两个指令都在 rewrite tail阶段使用 , 如果在同一个执行阶段使用这两个指令 , 会按照指令的前后顺序执行 。
  • headers-more-nginx模块的指令都是区分大小写的 , 所以要注意区分字母的大小写 。
5.实战经验