• 通过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;
    }





  • 相关阅读:
    itchat 监控微信好友撤回消息
    JAVA学习笔记(持续更新)
    go-gob序列化/反序列化与读写文件性能对比测试
    go-单元测试
    如何防范常见的Web攻击-转载
    go-读写json文件
    有关python&&c++的散碎的一些知识点_随时更新
    C Primer Plus 嵌入式裸板程序开发
    大论文格式总结(word2013)
    版本控制系统git和svn
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/7123310.html
Copyright © 2020-2023  润新知