ngx_http_sub_module模塊是一個過濾器,它修改網站響應內容中的字符串,好比你想把響應內容中的‘ttlsa’所有替換成‘運維生存時間’,這個模塊已經內置在nginx中,可是默認未安裝,須要安裝須要加上配置參數:--with-http_sub_modulejavascript
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
一切搞定
語法: 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.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; } } |
內容以下
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; } |
這邊我就再也不作測試了,你們能夠測試一下.
這個nginx替換響應內容的模塊安裝使用尤其簡單,應用的地方相對較少,在nginx中也是一個可選模塊。假如站點出現什麼敏感字,想修改很耗時間,不妨試試這個模塊.或者想臨時在站點中加上一個通用js或者css之類的文件,也可使用這個模塊.至於要在哪裏,你們看看本身的需求.