Nginx内容过滤器-subs_filter

今天在工作中偶然发现一个有意思的现象,我们的开发环境和演练环境都是同样的代码,同样的环境。但是演练环境打开的网页在窗口外层都会包裹着一个红色的边框,右上角还有一个圆形的红底Test标识。大概是这样的一个效果:

当时就想,这是怎么出来的呢,直觉告诉我这一定不是代码层追加上来的,因为两个环境的代码都是一毛一样的。应该是服务器层强加上去的,于是报着这种对技术的好奇,终于让在百度上找到了结果。

说实话,这种都不知道如何提问的问题,在百度上去搜索也是费了我一番心思,我直接搜索:nginx 内容替换

这样多搜索了几次,我终于知道原来nginx有一个扩展模块叫做subs_filter,专门就是用来内容过滤用的,看了一个它的介绍功能还挺强大的。

找到了线索,自己总想也实践一把,于是下班回家后,我登录到我的阿里云服务器,决定来折腾一把,毕竟搞技术的,不去真正实践一把那永远也只是停留在理论之上,我们要实论结合实践才能真的算是掌握,尽管折腾的过程也是有一点费时,但还是值得的。

ok,废话不说,我把实践的过程来一个从头到尾的回放,但愿对感兴趣的你有所帮助。

首先我看一下我的nginx 的安装情况:

这是我未安装之前的nginx信息

安装subs_filter扩展,需要先下载这个扩展,链接如下:

https://github.com/yaoweibin/ngx_http_substitutions_filter_module

直接Download ZIP 包下来,或者用git命令也行,我是先把zip下载下来,然后在服务器上用rz命令上传上去(其它有点傻,如果服务器上装了git的话,直接用git命令更省事)再unzip解压即可。

接下来是进入nginx源码安装时的目录,我的是usr/local/src下,如图:

直接使用命令:./configure --user=nginx --group=nginx --with-http_ssl_module --add-module=/usr/local/src/ngx_http_substitutions_filter_module-master

加粗标红的就是这次的重点,即添加的扩展模块

使用make 命令编译一下,注意:只需要make一下,不需要再执行 make install 命令

此时,会在objs目录下更新nginx执行 文件,如图:

接下来我们先备份好原有的nginx执行文件,命令:

cd /usr/local/nginx/sbin/

mv nginx nginx.bak.20210303

如图:

然后复制刚才objs目录下的nginx执行文件到 nginx /usr/local/nginx/sbin目录中,

cd -

cp nginx /usr/local/nginx/sbin/

复制好以后,我们先停掉正在运行的nginx服务,使用pkill -9 nginx

再次启动 nginx服务 /usr/local/nginx/sbin/nginx

此时就已经安装好subs_filter这个模块了,如图:

OK,此时模块已经装好,我们需要做的是在nginx配置文件中,配置好过滤与替换内容即可,打开我的88端口的nginx配置文件:

subs_filter 这里解释一下:

subs_filter '</body>' '<divclass="test_box">Test</div><scriptsrc="js/jquery.min.js"></script><scriptsrc="js/test.js"></script></body>';

这一段的意思,相于是在body标签的后面加上一个class="test_box" 的<div> 然后再引入两个js,在test.js里面写上逻辑,代码如下:

$(function(){var h = $(window).height();var w = $('body').width();console.log(w,h);        $('body').css({'margin':0,'padding':0,'border':'5px solid red','width':w-10,'height':h-10});        $('.test_box').css(                {'background':'red','width':'50px','height':'50px','border-radius':'100%','position':'absolute','top':'10px','right':'25px','text-align':'center','line-height':'50px','color':'#fff'                });})

这个就不用解释了吧,一段js的代码,主要是给body加个红色的边框,然后再给插入的<div>动态加上样式。

接下来我们写一个简单的静态文件,test.html,代码如下:

<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>hello world</title></head><body><h1>hello world</h1></body></html>

访问一下这个页面,看看效果:

没错,就是这个效果,和我在演练环境看到的一毛一样。折腾了一两个小时,终于搞明白了这个问题,还算是有所收获吧...

好了,今天的分享就此结束,有好的建议与想法欢迎留言。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. --prefix=${PATH_INSTALL}/nginx: --prefix 指定安装目录,${PATH_INSTALL}/nginx 为安装目录的路径。可选值为任意路径,根据实际需要进行设置。此参数会影响到 nginx 的安装位置,例如配置文件的位置、日志文件的位置等。 2. --user=nginx: --user 指定 nginx 运行的用户,默认为 nobody。可选值为任意用户,根据实际需要进行设置。此参数会影响到 nginx 运行的权限。 3. --group=nginx: --group 指定 nginx 运行的用户组,默认为 nobody。可选值为任意用户组,根据实际需要进行设置。此参数会影响到 nginx 运行的权限。 4. --with-http_ssl_module: --with-http_ssl_module 开启 SSL/TLS 功能,支持 HTTPS 协议。可选值为 --with-http_ssl_module 或 --without-http_ssl_module。如果需要支持 HTTPS 协议,则必须开启此选项。 5. --with-http_realip_module: --with-http_realip_module 开启真实 IP 模块,用于获取客户端真实 IP 地址。可选值为 --with-http_realip_module 或 --without-http_realip_module。如果需要获取客户端真实 IP 地址,则必须开启此选项。 6. --with-http_addition_module: --with-http_addition_module 开启添加响应头模块,用于添加自定义的响应头信息。可选值为 --with-http_addition_module 或 --without-http_addition_module。 7. --with-http_sub_module: --with-http_sub_module 开启替换响应内容模块,用于替换响应内容中的关键字。可选值为 --with-http_sub_module 或 --without-http_sub_module。 8. --with-http_dav_module: --with-http_dav_module 开启 WebDAV 模块,用于支持 WebDAV 协议。可选值为 --with-http_dav_module 或 --without-http_dav_module。 9. --with-http_flv_module: --with-http_flv_module 开启 FLV 视频流模块,用于支持 FLV 格式的视频流。可选值为 --with-http_flv_module 或 --without-http_flv_module。 10. --with-http_mp4_module: --with-http_mp4_module 开启 MP4 视频流模块,用于支持 MP4 格式的视频流。可选值为 --with-http_mp4_module 或 --without-http_mp4_module。 11. --with-http_gunzip_module: --with-http_gunzip_module 开启 Gzip 解压缩模块,用于支持 Gzip 压缩格式。可选值为 --with-http_gunzip_module 或 --without-http_gunzip_module。 12. --with-http_gzip_static_module: --with-http_gzip_static_module 开启 Gzip 静态文件压缩模块,用于对静态文件进行 Gzip 压缩。可选值为 --with-http_gzip_static_module 或 --without-http_gzip_static_module。 13. --with-http_stub_status_module: --with-http_stub_status_module 开启状态页面模块,用于查看 nginx 的状态信息。可选值为 --with-http_stub_status_module 或 --without-http_stub_status_module。 14. --with-stream: --with-stream 开启 TCP/UDP 代理模块,用于支持 TCP/UDP 协议。可选值为 --with-stream 或 --without-stream。 15. --with-stream_ssl_module: --with-stream_ssl_module 开启 SSL/TLS 功能,支持 TCP/UDP 的 SSL/TLS 加密。可选值为 --with-stream_ssl_module 或 --without-stream_ssl_module。 16. --with-http_v2_module: --with-http_v2_module 开启 HTTP/2 模块,用于支持 HTTP/2 协议。可选值为 --with-http_v2_module 或 --without-http_v2_module。 17. --with-pcre: --with-pcre 指定使用 PCRE 库进行正则表达式匹配。可选值为 --with-pcre 或 --without-pcre。 18. --with-openssl=/www/server/nginx/src/openssl: --with-openssl 指定使用 OpenSSL 库进行 SSL/TLS 加密。可选值为 OpenSSL 库的路径。如果开启了 SSL/TLS 功能,则必须指定此选项。 19. --with-stream_ssl_preread_module: --with-stream_ssl_preread_module 开启 TCP/UDP SSL/TLS 握手前置模块,用于在握手前解析 SSL/TLS 协议。可选值为 --with-stream_ssl_preread_module 或 --without-stream_ssl_preread_module。 20. --with-http_image_filter_module: --with-http_image_filter_module 开启图片处理模块,用于对图片进行缩放、裁剪等操作。可选值为 --with-http_image_filter_module 或 --without-http_image_filter_module。 21. --with-ipv6: --with-ipv6 开启 IPv6 支持。可选值为 --with-ipv6 或 --without-ipv6。 22. --with-ld-opt=-Wl,-E: --with-ld-opt 指定链接器选项,-Wl,-E 表示启用链接器的 export-dynamic 选项。可选值为任意链接器选项,根据实际需要进行设置。此参数会影响到 nginx 的链接器选项。 23. --with-cc-opt=-Wno-error: --with-cc-opt 指定编译器选项,-Wno-error 表示忽略编译器的错误提示。可选值为任意编译器选项,根据实际需要进行设置。此参数会影响到 nginx 的编译器选项。 24. --with-ld-opt=-ljemalloc: --with-ld-opt 指定链接器选项,-ljemalloc 表示链接 jemalloc 库。可选值为任意链接器选项,根据实际需要进行设置。此参数会影响到 nginx 的链接器选项。 25. --add-module=/www/server/nginx/src/ngx_devel_kit: --add-module 指定添加第三方模块,/www/server/nginx/src/ngx_devel_kit 为第三方模块的路径。可选值为任意第三方模块的路径,根据实际需要进行设置。此参数会影响到 nginx 的模块加载顺序。 26. --add-module=/www/server/nginx/src/lua_nginx_module: --add-module 指定添加第三方模块,/www/server/nginx/src/lua_nginx_module 为第三方模块的路径。可选值为任意第三方模块的路径,根据实际需要进行设置。此参数会影响到 nginx 的模块加载顺序。 27. --add-module=/www/server/nginx/src/ngx_cache_purge: --add-module 指定添加第三方模块,/www/server/nginx/src/ngx_cache_purge 为第三方模块的路径。可选值为任意第三方模块的路径,根据实际需要进行设置。此参数会影响到 nginx 的模块加载顺序。 28. --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master: --add-module 指定添加第三方模块,/www/server/nginx/src/ngx_http_substitutions_filter_module-master 为第三方模块的路径。可选值为任意第三方模块的路径,根据实际需要进行设置。此参数会影响到 nginx 的模块加载顺序。 29. --add-module=/www/server/nginx/src/nginx-dav-ext-module: --add-module 指定添加第三方模块,/www/server/nginx/src/nginx-dav-ext-module 为第三方模块的路径。可选值为任意第三方模块的路径,根据实际需要进行设置。此参数会影响到 nginx 的模块加载顺序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚拟社群

你的鼓励将是我们创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值