1. >>ngx_http_substitutions_filter_module OR HttpSubModule ?
為了應急處理或者一些需要,有時(shí)候需要使用Nginx的反向代理某站點(diǎn),并通過(guò) HttpSubModule 和ngx_http_substitutions_filter_module 模塊替換正文內容和URL。
但是通常LNMP套件安裝的webserver并沒(méi)有編譯安裝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并不多,這也是它為什么性能好,系統開(kāi)銷(xiāo)較小的原因之一,相比apache,它不能動(dòng)態(tài)的加載module,如果之前編譯安裝了Nginx,這時(shí)候就需要重新編譯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編譯安裝第三方模塊的時(shí)候需要添加上之前編譯的configure參數,然后重新設置configure編譯(但是不覆蓋安裝,只make不install):
./configure --prefix=/你的安裝目錄 --add-module=/第三方模塊目錄
4. 3.重新編譯Nginx
# 打開(kāi)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
備注:重新編譯的時(shí)候,記得一定要把以前編譯過(guò)的模塊一同加到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.簡(jiǎn)單配置
7. ① HttpSubModule 的 官方文檔 說(shuō)的很清楚,這里就不寫(xiě)實(shí)例了,并且功能沒(méi)有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是開(kāi)啟此功能,off是關(guān)閉——默認值是on。
sub_filter_types 一行意思是選定查找替換文件類(lèi)型為文本型。也可以不加此行,因為默認只查找text/html文件。
sub_filter模塊可以用在http, server, location模塊中。主要作用就是查找替換文件字符。
8. ② substitutions4nginx
8.1. subs_filter
實(shí)例:
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: 執行不區分大小寫(xiě)的匹配。
o: 只需將第一個(gè)。
r:該模式是作為一個(gè)正則表達式處理,默認是固定的字符串。
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_modulesubstitutions4nginxNginx第三方模塊