通過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;
}






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM