sub_module模块


The ​​ngx_http_sub_module​​ module is a filter that modifies a response by replacing one specified string by another.

This module is not built by default, it should be enabled with the ​​--with-http_sub_module​​ configuration parameter.

ngx_http_sub_module 模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘test’全部替换成‘mytest’,这个模块已经内置在Nginx中,但是默认未安装,需要安装需要加上配置参数:– with-http_sub_module

 

安装sub_module模块


[root@www ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=../nginx-http-concat-master
[root@www src]# cd /usr/src/nginx-1.16.1
[root@www nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=../nginx-http-concat-master --with-http
_sub_module
[root@www nginx-1.16.1]# make && make install
[root@www nginx-1.16.1]# make upgrade
语法: sub_filter string replacement;
默认值: —
配置段: http, server, location
设置需要使用说明字符串替换说明字符串.string 是要被替换的字符串, replacement 是新的字符串,它里面可以带变量。


语法: sub_filter_last_modified on | off;
默认值: sub_filter_last_modified off;
配置段: http, server, location
这个指令在 nginx 1.5.1 中添加,我这个版本没有,可以忽略掉.
Allows preserving the “ Last-Modified” header field from the original response during replacement to facilitate response caching.
By default, the header field is removed as contents of the response are modified during processing.


语法: sub_filter_once on | off;
默认值: sub_filter_once on;
配置段: http, server, location
字符串替换一次还是多次替换,默认替换一次,例如你要替换响应内容中的tets为mytest,如果有多个test 出现,那么只会替换第一个,如果 off,那么所有的test都会被替换


语法: sub_filter_types mime-type …;
默认值: sub_filter_types text/html;
配置段: http, server, location
指定需要被替换的 MIME 类型,默认为“ text/html”,如果制定为*,那么所有的

 

Nginx 替换字符串实例


server {
listen 80;
server_name www.test.com;
charset utf-8;
root html;
location /{
sub_filter test 'mytest';
sub_filter_once on;
} }



[root@www ~]# echo "welcom to TEST" > /usr/local/nginx/html/sub1.html
[root@www ~]# cat /usr/local/nginx/html/sub1.html
welcom to TEST
[root@www ~]# curl www.test.com/sub1.html
welcom to mytes
我们可以看到它替换是不区分大小写的,而且test只被替换了一次。我把 sub_filter_once on 改成 off 试试。



[root@www ~]# echo "welcom to TEST website" >> /usr/local/nginx/html/sub1.html
[root@www ~]# cat /usr/local/nginx/html/sub1.html
welcom to TEST
welcom to TEST website
[root@www ~]# curl www.test.com/sub1.html
welcom to mytest
welcom to mytest website
我们可以看到test都被替换掉了!

 总结


这个 nginx 替换响应内容的模块安装使用尤为简单,应用的地方相对较少,在 nginx 中也是一个可选模块。假如站点出现什么敏感字,想修改很耗时间,不妨试试这个模块.或者想临时在站点中加上一个通用 js 或者 css 之类的文件,也可以使用这个模块.至于要在哪里,大家看看自己的需求。