nginx替換網站響應內容(ngx_http_sub_module)

ngx_http_sub_module模塊是一個過濾器,它修改網站響應內容中的字符串,好比你想把響應內容中的‘ttlsa’所有替換成‘運維生存時間’,這個模塊已經內置在nginx中,可是默認未安裝,須要安裝須要加上配置參數:--with-http_sub_modulejavascript

1. 安裝nginx

 

 

1css

2html

3java

4nginx

5運維

6curl

# wget http://nginx.org/download/nginx-1.4.2.tar.gz測試

# tar -xzvf nginx-1.4.2.tar.gz網站

# cd nginx-1.4.2ui

#  --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module --with-http_sub_module

# make

# make install

若是你已經安裝了nginx,只須要額外追加這個模塊,請看如何安裝nginx第三方模塊

有時候,咱們須要單獨安裝nginx,來處理大量的下載請求。單獨在Centos5安裝nginx遇到的rewrite和HTTP cache錯誤解決辦法:

wget http://nginx.org/download/nginx-0.8.33.tar.gz
tar -zxvf nginx-0.8.33.tar.gz 
cd nginx-0.8.33
./configure --prefix=/usr/local/nginx

 

安裝Nginx時報錯

./configure: error: the HTTP rewrite module requires the PCRE library.

安裝pcre-devel解決問題
yum -y install pcre-devel

 

錯誤提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library.   You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.

解決辦法:

yum -y install openssl openssl-devel

 

總結:

yum -y install pcre-devel openssl openssl-devel

./configure --prefix=/usr/local/nginx

make

make install

一切搞定

2. 指令(Directives)

語法:     sub_filter string replacement;
默認值:     —
配置段:     http, server, location
設置須要使用說明字符串替換說明字符串.string是要被替換的字符串,replacement是新的字符串,它裏面能夠帶變量。

語法:     sub_filter_last_modified on | off;
默認值: sub_filter_last_modified off;
配置段:     http, server, location
這個指令在nginx 1.5.1中添加,我這個版本沒有,能夠忽略掉.
Allows preserving the 「Last-Modified」 header field from the original response during replacement to facilitate response caching.
By default, the header field is removed as contents of the response are modified during processing.

語法: sub_filter_once on | off;
默認值: sub_filter_once on;
配置段: http, server, location
字符串替換一次仍是屢次替換,默認替換一次,例如你要替換響應內容中的ttlsa爲運維生存時間,若是有多個ttlsa出現,那麼只會替換第一個,若是off,那麼全部的ttlsa都會 被替換

語法: sub_filter_types mime-type ...;
默認值: sub_filter_types text/html;
配置段: http, server, location
指定須要被替換的MIME類型,默認爲「text/html」,若是制定爲*,那麼全部的

3. nginx替換字符串實例

3.1 配置

 

1

2

3

4

5

6

7

8

9

10

11

12

server {

    listen       80;

    server_name  www.ttlsa.com;

 

    root /data/site/www.ttlsa.com;    

 

    location / {

        sub_filter  ttlsa '運維生存時間';

        sub_filter_types text/html;

        sub_filter_once on;

    }

}

 

3.2 測試

內容以下

 

1

2

3

# cat /data/site/www.ttlsa.com/2013/10/20131001_sub1.html

welcome to tTlsa!

TTLSA TEAM!

訪問結果

 

1

2

3

# curl www.ttlsa.com/2013/10/20131001_sub1.html           

welcome to 運維生存時間!

TTLSA TEAM!

咱們能夠看到它替換是不區分大小寫的,並且ttlsa只被替換了一次。我把sub_filter_once on改爲off試試。

 

1

2

3

4

location / {

    sub_filter  ttlsa '運維生存時間';

    sub_filter_once off;

}

接着測試

 

1

2

3

# curl www.ttlsa.com/2013/10/20131001_sub1.html            

welcome to 運維生存時間!

運維生存時間 TEAM!

咱們能夠看到ttlsa都被替換掉了.

例如你想在</head>後追加一段js,配置以下:

 

1

2

3

4

location / {

    sub_filter      </head> '</head><script language="javascript" src="$script"></script>';

    sub_filter_once on;

}

這邊我就再也不作測試了,你們能夠測試一下.

4. 結束語

這個nginx替換響應內容的模塊安裝使用尤其簡單,應用的地方相對較少,在nginx中也是一個可選模塊。假如站點出現什麼敏感字,想修改很耗時間,不妨試試這個模塊.或者想臨時在站點中加上一個通用js或者css之類的文件,也可使用這個模塊.至於要在哪裏,你們看看本身的需求.

相關文章
相關標籤/搜索