Nginx 响应过滤模块 ngx_http_addition_module

10/18 08:52
阅读数 27

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!

  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来实现,避免了修改应用和网站的问题。

  · 知识是需要储备的,应用场景会在未来的某天悄然而至,那时需要的是你的知识库里有它。

  若文中存在错误和不足,欢迎指正!

本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
在这里插入图片描述

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部