Nginx编译安装第三方模块http_substitutions_filter_module 分类:服务器技术 做者:rming 时间:2014-04-19 1. >>ngx_http_substitutions_filter_module OR HttpSubModule ? 为了应急处理或者一些须要,有时候须要使用Nginx的反向代理某站点,并经过 HttpSubModule 和ngx_http_substitutions_filter_module 模块替换正文内容和URL。 可是一般LNMP套件安装的webserver并无编译安装nginx官方模块HttpSubModule(官方option),而且,官方自带的模块HttpSubModule 只能匹配1条规则,可是使用第三方模块ngx_http_substitutions_filter_module 能够匹配多条规则。 备注: ngx_http_substitutions_filter_module 是指第三方nginx模块 substitutions4nginx (原:Google Code 现:github) HttpSubModule 是指Nginx官方的 with-http_sub_module模块(option) Nginx自身带的module并很少,这也是它为何性能好,系统开销较小的缘由之一,相比apache,它不能动态的加载module,若是以前编译安装了Nginx,这时候就须要从新编译nginx添加模块,并替换掉原先的nginx执行文件。 2. 1.下载须要的文件 substitutions4nginx github下载 # 下载第三方模块 # cd ~ # git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git 3. 2.查看以前Nginx编译configure # nginx -V nginx version: nginx/1.2.7 built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with- http_ssl_module --with-http_gzip_static_module --with-ipv6 由于Nginx编译安装第三方模块的时候须要添加上以前编译的configure参数,而后从新设置configure编译(可是不覆盖安装,只make不install): ./configure --prefix=/你的安装目录 --add-module=/第三方模块目录 4. 3.从新编译Nginx # 打开Nginx编译目录,版本号可能不一样 # cd ~/lnmp1.0-full/nginx-1.2.7 # 从新configure # ./configure --prefix= --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --add-module=/root/ngx_http_substitutions_filter_module # make 备注:从新编译的时候,记得必定要把之前编译过的模块一同加到configure参数里面. 5. 4.覆盖原nginx文件 # /etc/init.d/nginx stop # cd cd objs/ # 覆盖原文件 # cp nginx /usr/local/nginx/sbin/ # /etc/init.d/nginx start 6. 5.简单配置 7. ① HttpSubModule 的 官方文档 说的很清楚,这里就不写实例了,而且功能没有substitutions4nginx的强大。 7.1. 在头部引入指定JS location / { sub_filter </head> '</head><script language="javascript" src="$script"></script>'; sub_filter_types text/html; sub_filter_once on; } sub_filter 一行代码前面是须要替换的内容,后面单引号内是替换成的内容。 sub_filter_once 意思是只查找并替换一次。on是开启此功能,off是关闭——默认值是on。 sub_filter_types 一行意思是选定查找替换文件类型为文本型。也能够不加此行,由于默认只查找text/html文件。 sub_filter模块能够用在http, server, location模块中。主要做用就是查找替换文件字符。 8. ② substitutions4nginx 8.1. subs_filter 实例: location / { subs_filter_types text/html text/css text/xml; subs_filter st(\d*).example.com $1.example.com ir; subs_filter a.example.com s.example.com; } g(default):替换全部匹配的字符串。 i: 执行不区分大小写的匹配。 o: 只需将第一个。 r:该模式是做为一个正则表达式处理,默认是固定的字符串。 8.2. subs_filter_types syntax: subs_filter_types mime-type [mime-types] default: subs_filter_types text/html context: http, server, location subs_filter ‘<(no?script.*?)>(.*?)<(\/no?script.*?)>’ ” gi; //替换掉所有的<noscript></noscript> subs_filter ‘<(s?cript.*?)>(?:\s|\S)*?<(\/s?cript.*?)>’ ” gi; //替换掉所有的<script>包换中间换行</script> subs_filter ‘<(i?frame.*?)>(.*?)<(\/i?frame.*?)>’ ” gi; //替换<iframe></iframe> 9. >>参考资料<< ngx_http_sub_module substitutions4nginx Nginx第三方模块 PHP使用header函数设置HTTP头的示例方法 使用Git来部署一个Web站点笔记 zytsezytse January 19th, 2015 at 08:42 pm 请问如何替换汉字呢?好比“中国”替换成“世界” 回复 海天海天 April 3rd, 2015 at 12:48 am 博主你好,我使用你文章中说的方法,修改了网站的conf文件后也没有报错 可是替换一个网站中的google的ajax文件却一直不成功,麻烦你帮我看看 我使用的http://ps.haoyingyu.net反向代理了http://ourdiscoveryisland.com/ conf配置是 server { listen 80; server_name ps.haoyingyu.net; location / { sub_filter ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js libs.baidu.com/jquery/1.7.2/jquery.min.js; sub_filter_once off; proxy_pass http://ourdiscoveryisland.com/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }