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. 效果
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 "";
return [[<script src="https://dn-linuxcn.qbox.me/static/js/ads.js?aR6" ></script></body>]];
}
sub_filter </body> $userurl;
} set_by_lua_block $userurl {