而ngx_http_headers_module 的2个紧张指令(add_header, expires) 中的add_header指令,只适宜用来添加相应头,如需对HTTP要求头进行处理,可以利用第三方模块headers-more-nginx,它可以用来添加、删除、修正HTTP要求头和相应头。该模块地址为https://github.com/openresty/headers-more-nginx-module.git,其安装办法如下:
[root@network-test nginx]# lltotal 1036drwxr-xr-x 6 root root 4096 Aug 24 10:59 headers-more-nginx-module-rw-r--r-- 1 root root 1048727 Aug 11 23:03 nginx-1.19.2.tar.gz[root@network-test nginx]# # git clone https://github.com/openresty/headers-more-nginx-module.git[root@network-test nginx]# # wget http://nginx.org/download/nginx-1.19.2.tar.gz[root@network-test nginx]# [root@network-test nginx]# tar -xf nginx-1.19.2.tar.gz[root@network-test nginx]# cd nginx-1.19.2/[root@network-test nginx-1.19.2]# ./configure --prefix=/usr/local/nginx --add-module=../headers-more-nginx-module[root@network-test nginx-1.19.2]# make && make install
安装完成后,对其进行配置,让它实现和add_header指令一样的功能。
实例1:

more_set_headers 'Cache-Control : 1000';# 上述配置等同于add_header Cache-Control 1000 always; # 浸染是无论返回的状态码是什么都会输出相应头。
初始header;
添加nginx 配置 more_set_headers 'Cache-Control : 1000';
验证已经添加成功:
实例2:
more_set_headers -s '200 301' 'Cache-Control:1000';
上述配置等同于add_header Cache-Control 1000;,表示当状态码是200或301时才输出相应头,从而加强对相应头的掌握。
当后端做事器返回的相应头和利用more_set_headers指令时相同时,相应头的值会被more_set_headers更换掉,这样就不会同时涌现两个相同的相应头了。
headers-more-nginx模块常用的操作指令还有很多,例如more_set_headers、more_clear_headers、more_set_input_headers、more_clear_input_headers等。
Detail
1.根据HTTP状态掌握相应头
指令:more_set_headers
语法:more_set_headers [-t <content-type list>] … [ -s <status-code list> ]…<new-header>…
默认值:无
环境:http、server、location、location if
实行阶段:output-header-filter
示例:more_set_headers -s 404 -s ‘500 502’ ‘Result:error’ ‘F:X-re’;
含义:在返回相应报文前对相应头进行新增或更换操作。
示例的意思是当相应状态码(-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';
2.根据HTTP状态打消相应头
指令:more_clear_headers
语法:more_clear_headers [-t <content-type list>]…[-s <status-code list>]…<new-header>…
默认值:无
环境: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阶段并实行到末了时,再添加一个要求头,该要求头将和要求一起到达下一个阶段;
示例如下:
4.打消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.实战履历
关于指令more_clear_headers打消相应头操作可以用来隐蔽做事内部的一些敏感信息,如varnish自带的相应头,或者PHP框架天生的相应头等。在实际业务中首先要确定须要通报给客户真个相应头信息,而不必通报给客户真个信息则可以利用此方法进行打消。关于指令more_set_input_headers和more_clear_input_headers ; 这两个指令都在 rewrite tail阶段利用,如果在同一个实行阶段利用这两个指令,会按照指令的前后顺序实行。headers-more-nginx模块的指令都是区分大小写的,以是要把稳区分字母的大小写。nginx module : set-misc-nginx第三方模块set-misc-nginx在rewrite阶段利用,它功能丰富,具有设置变量、URL转义、天生随机数、防止SQL注入、解码与编码等多项功能。
install and overview该模块地址为https://github.com/openresty/set-misc-nginx-module.git
安装时直接编译即可,如下所示:
git clone https://github.com/openresty/set-misc-nginx-module.gitgit clone https://github.com/vision5/ngx_devel_kit.gitcd nginx-1.19.2/./configure --prefix=/usr/local/nginx --add-module=../ngx_devel_kit --add-module=../set-misc-nginx-modulemake && make install
把稳:很多第三方模块在编译时都须要加入ngx_devel_kit模块,由于ngx_devel_kit扩展了Nginx做事器的核心功能,很多第三方模块都是基于它实现的。
如果不该用此模块,而直接用Nginx进行配置会比较麻烦。
下面的其他功能指令由于利用的机会不会很多;尽做展示;须要时实际再查即可;
2、防止SQL注入
指令:set_quote_sql_str
3、字符串非转义和转义
指令:set_unescape_uri
4、基于键值的集群分片
Nginx通过第三方模块可以和数据库进行交互,这使API 做事更随意马虎支配和开拓。当须要对数据库中的数据分片读取时,可以利用指令set_hashed_upstream进行配置。
指令:set_hashed_upstream
5、base编码
指令:set_encode_base32
6、md5编码
指令:set_md5
7、天生随机数
指令:set_random
指令:set_secure_random_alphanum
指令:set_secure_random_lcalpha
8、本地韶光的输出
指令:set_local_today
9、实战履历
关于指令set_if_empty要只管即便减少if语句的利用,而且利用set_if_empty能够提升Nginx的可读性。关于指令set_quote_sql_str一旦让Nginx和数据库直接交互,要确保set_quote_sql_str指令的存在,以防止SQL注入。关于指令set_unescape_uri和set_escape_uri在处理数据时,如URL,须要确保转义和非转义的统一性,避免涌现前面的代码做了转义,但后面的某些环节却利用非转义数据的情形,由于这样会导致在匹配和比拟时涌现数据不一致的情形。关于指令set_hashed_upstream该类型的分片比较大略,不涉及高可用。如果某个upstream做事全部“挂掉”,则会报错。因此,在设计分片时要考虑足够多的可能性。nginx module : ngx_http_image_filter_moduleinstall and overviewNginx可以利用ngx_http_image_filter_module对图片进行切割裁剪,这为动态处理图片供应了支持。
安装办法:只需在编译Nginx时,添加--with-http_image_filter_module即可。
依赖库:libgd(gddevel),在CentOS系统下通过yum安装即可(推举利用最新版本)。
详细的利用;在有须要时,可以查阅对应官网解释和利用手册;