通过openresty && tengine && nginx 动态添加资源到 html 页面
1. 目标
不用修改后端代码,但是还需要进行js 、css 等资源文件的加载
主要的场景是进行统计分析
2.技术实现
通过服务器扩展进行动态添加
iis 可以添加模块,nginx 可以使用 sub_filter,tengine 可以使用 ngx_http_footer_filter_module
openresty 可以使用sub_filter(默认以及编译进去了) 或者 通过lua 脚本获取内容,然后修改,或者把
tengine 的模块打包进去。
3. 代码实现(基于openresty)
location / {
root html;
index index.html index.htm;
sub_filter_once on;
sub_filter </body> '<script src="https://dn-linuxcn.qbox.me/static/js/ads.js?aR6" ></script></body>';
}
备注:对于反向代理的页面也可以进行添加
4. 效果

5. sub_filter 参考资料
sub_filter 一行代码前面是需要替换的内容,后面单引号内是替换成的内容。
sub_filter_once 意思是只查找并替换一次。on是开启此功能,off是关闭——默认值是on。
sub_filter_types 一行意思是选定查找替换文件类型为文本型。也可以不加此行,因为默认只查找文本型文件。
sub_filter模块可以用在http, server, location模块中。主要作用就是查找替换文件字符。
比较实用的例子就是,如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为
文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可
以利用这个实现服务器端文字过滤的效果,结合openresty 你可以实现更厉害的功能,可以自己发挥。
6. 延伸
结合 openresty 能够直接访问redis memcache mysql 在 access 阶段 、 set 阶段我们可以进行动态扩展脚本
如下,同样的功能将代码修改为一下的配置
location / {
root html;
index index.html index.htm;
sub_filter_once on;
set $userurl "";set_by_lua_block $userurl {
return [[<script src="https://dn-linuxcn.qbox.me/static/js/ads.js?aR6" ></script></body>]];
}
sub_filter </body> $userurl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2015-07-05 将内网映射到外网的工具