文章目录

最近弄的一个网站需要在全站添加上统计代码,本来呢这个需求直接写到模板里面就好,可是这个程序的模板有好几百个,一个个去写太蛋疼了,而且有些静态文件生成什么不太好弄。所以就打算在nginx上动动手脚。

google一番查到nginx有个sub模块可以用来干这个事情,代码也很简单。

sub_filter '</body>' '<div style="display:none;"><script src=“[统计代码引用的js地址]” language=“JavaScript”></script></div></body>';

然后通过测试发现静态文件里面有加上这些代码,但是php的页面上始终没有替换过来。后来用nginx的lua模板去整这玩意,发现原来是因为gzip的关系。因为我是通过反代后端的apache来执行php的,而apache返回过来的内容是被gzip过的,所以替换的时候找不到 </body> 。解决办法也很简单,不需要改动apache的配置只要在 nginx的反代代码里面加入下面这一句,改写掉 header 请求信息就行。

proxy_set_header Accept-Encoding "";

这样后端返回的代码就不会被gzip。然后我特意观察了一下 nginx 的返回信息,nginx 会对后端的代码替换后再用 gzip 压缩返回给浏览器。

文章目录