Nginx編譯安裝第三方模組http_substitutions_filter_module2222

weixin_34391854發表於2015-11-13
Nginx編譯安裝第三方模組http_substitutions_filter_module

Rming 2014-04-19 324 閱讀
安裝 Http 編譯 module filter nginx 模組
>>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執行檔案。

1.下載需要的檔案

substitutions4nginx github下載

# 下載第三方模組
# cd ~
# git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
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=/第三方模組目錄
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引數裡面.

4.覆蓋原ngixn檔案

# /etc/init.d/nginx stop
# cd cd objs/
# 覆蓋原檔案
# cp nginx /usr/local/nginx/sbin/
# /etc/init.d/nginx start
5.簡單配置

① HttpSubModule 的 官方文件 說的很清楚,這裡就不寫例項了,並且功能沒有substitutions4nginx的強大。

在頭部引入指定JS

location / {
  sub_filter      </head>
  '</head><script language="javascript" src="http://rmingwang.com/$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模組中。主要作用就是查詢替換檔案字元。
② substitutions4nginx

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:該模式是作為一個正規表示式處理,預設是固定的字串。

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>

 

相關文章