欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!
ngx_http_addition_module是一个过滤器,可以在响应之前和响应之后添加文本。
默认安装时,Nginx未构建此模块,应使用–with-http_addition_module配置参数启用它。
响应过滤模块 配置安装
首先切换到Nginx源码目录,运行./configure --without-http_gzip_module --with-http_addition_module命令。
cd /securitit/nginx-1.19.3
./configure --without-http_gzip_module --with-http_addition_module
配置完成后,执行make命令,但切记,不要执行make install命令。
make
编译完成后,将nginx执行文件复制到/usr/local/nginx/sbin/下(/usr/local/nginx/是Nginx的默认安装目录),复制之前,最好将nginx备份。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-default
cp /securitit/nginx-1.19.3/objs/nginx /usr/local/nginx/sbin/nginx
通过上面的步骤,已成功将ngx_http_addition_module模块增加到已安装的Nginx中。
响应过滤模块 语法及语义
响应过滤模块提供的指令只有三个:add_before_body、add_after_body和addition_types,接下一一分析指令的语法即语义。
add_before_body
语法:add_before_body uri;
语义:在响应正文之前添加给定的子请求返回的文本。空字符串("")作为参数将取消从先前配置级别继承的增加。
add_after_body
语法:add_after_body uri;
语义:在响应正文之后添加给定的子请求返回的文本。空字符串("")作为参数将取消从先前配置级别继承的增加。
addition_types
语法:addition_types mime-type …;
用于指定进行过滤的响应的媒体类型,默认值是text/html,特殊值"*"表示任何媒体类型。
响应过滤模块示例
· 直接引用uri
为演示效果,在/usr/local/nginx/html/目录下新家addition目录,在addition目录下新建before.html和after.html,为做区分,两个html的内容稍有差异。
使用初始安装的nginx.conf配置文件,访问http://192.168.20.9/,会得到大家都熟悉的页面:
对默认nginx.conf稍作修改,增加add_before_body和add_after_body指令配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
add_before_body /addition/before.html;
add_after_body /addition/after.html;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用./nginx -s reload平滑重启Nginx后,再次访问http://192.168.20.9/,会得到不一样的页面(此时,可能会出现页面没发生变化的情况,这是浏览器缓存在作怪,手动清除或调整浏览器设置即可):
· 间接引用uri
所谓间接引用,是指add_before_body和add_after_body配置的是Nginx的匹配路径。此种方式不仅可以返回uri的内容,亦可以自定义内容进行返回。
对nginx.conf进行如下更改:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
add_before_body /before_action;
add_after_body /after_action;
root html;
index index.html index.htm;
}
location /before_action {
return 200 "addition add text before body \n";
}
location /after_action {
return 200 "addition add text after body \n";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用./nginx -s reload平滑重启Nginx,访问http://192.168.20.9/,会得到与前面配置相同的结果:
总结
ngx_http_addition_module模块是比较冷门的模块,一般不是使用它,但是其确有其应用场景。淘宝研发的nginx-http-footer-filter与ngx_http_addition_module,有相似的功能。
· 用于针对应用和网站进行统计时使用,可以统一在Nginx代理层增加js来进行统计,避免了修改应用和网站的问题。
· 当需要在应用或网站上挂载广告时,就像大家看到的很多广告一样,可以统一在Nginx代理层增加html来实现,避免了修改应用和网站的问题。
· 知识是需要储备的,应用场景会在未来的某天悄然而至,那时需要的是你的知识库里有它。
若文中存在错误和不足,欢迎指正!
本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!