为了应急处理或者一些须要,有时候须要使用Nginx的反向代理某站点,并经过 HttpSubModule 和ngx_http_substitutions_filter_module 模块替换正文内容和URL。
可是一般LNMP套件安装的webserver并无编译安装nginx官方模块HttpSubModule(官方option),而且,官方自带的模块 HttpSubModule 只能匹配1条规则,可是使用第三方模块ngx_http_substitutions_filter_module 能够匹配多条规则。 javascript
备注:
ngx_http_substitutions_filter_module 是指第三方nginx模块 substitutions4nginx (原:Google Code 现:github)
HttpSubModule 是指Nginx官方的 with-http_sub_module模块(option) css
Nginx自身带的module并很少,这也是它为何性能好,系统开销较小的缘由之一,相比apache,它不能动态的加载module,若是以前编译安装了Nginx,这时候就须要从新编译nginx添加模块,并替换掉原先的nginx执行文件。 html
substitutions4nginx github下载 java
- # 下载第三方模块
- # cd ~
- # git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
- # 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): nginx
- ./configure --prefix=/你的安装目录 --add-module=/第三方模块目录
- # 打开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参数里面. git
- # /etc/init.d/nginx stop
- # cd cd objs/
- # 覆盖原文件
- # cp nginx /usr/local/nginx/sbin/
- # /etc/init.d/nginx start
- location / {
- sub_filter </head>
- '</head><script language="javascript" src="$script"></script>';
- sub_filter_types text/html;
- sub_filter_once on;
- }
- 实例:
- 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:该模式是做为一个正则表达式处理,默认是固定的字符串。 github
- 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>
substitutions4nginx 正则表达式
Nginx第三方模块 apache