今天,突然研發(fā)的同事說需要在公司網(wǎng)站頁面底部添加一個(gè)流量統(tǒng)計(jì)的scripts,但是不打算改代碼,所以希望能在代理的層面解決。這里只討論如果是在nginx來實(shí)現(xiàn),技術(shù)如何操作。但是具體是研發(fā)改代碼,還是寫在nginx,這個(gè)視情況而定。
這里可以使用 nginx 的 ngx_http_sub_module 模塊完成。我這里是使用tengine,所以這個(gè)模塊已經(jīng)有了。如果沒有的話,自己編譯添加以下:方法如下:
查看后發(fā)現(xiàn),默認(rèn)安裝沒有開啟這個(gè)模塊
nginx -V

nginx頁面替換01
保存好修改的文件,使用brew卸載掉nginx再重裝
然后修改nginx配置文件,在對(duì)應(yīng)的 server > location 上下文中,添加 sub_filter 指令。
這里使用了變量 $injected 保存了腳本地址,對(duì)response中有 body 標(biāo)簽的地方修改插入。
nginx.conf
location / {
...
set $injected '<script src="統(tǒng)計(jì)代碼引用的js地址如:http://localhost:8088/other/status.js"></script>';
sub_filter '<body>' '<body>${injected}';
sub_filter_types *;
sub_filter_once on;
#sub_filter 一行代碼前面是需要替換的內(nèi)容,后面單引號(hào)內(nèi)是替換成的內(nèi)容。
#sub_filter_once 意思是只查找并替換一次。on是開啟此功能,off是關(guān)閉——默認(rèn)值是on。
#sub_filter_types 一行意思是選定查找替換文件類型為文本型。也可以不加此行,因?yàn)槟J(rèn)只查找text/html文件。
#sub_filter模塊可以用在http, server, location模塊中。主要作用就是查找替換文件字符。
}
這里還可以在 sub_filter 多添加一條規(guī)則,將客戶端ip地址替換注入到頁面中。
替換響應(yīng)中的 UUIP_IP 字段為 ip 地址
sub_filter 'UUIP_IP' '${remote_addr}';
轉(zhuǎn)載自:http://www.ppzedu.com/archives/1049.html