使用Nginx反向代理和內容替換模塊實現網頁內容動態替換功能


Nginx是一款輕量級高性能服務器軟件,雖然輕量,但功能非常強大,可用於提供WEB服務、反向代理、負載均衡、緩存服務、甚至可以通過添加一些模塊搭建rtmp流媒體服務。最近碰到一個客戶需求,需要用到nginx網頁內容替換模塊,以下是相關實驗記錄,貼出來跟大家交流,如有不足之處請指出。

ngx_http_sub_module模塊是一個過濾器,它修改網站響應內容中的字符串。這個模塊已經內置在nginx中,但是默認未安裝,需要安裝需要加上配置參數:--with-http_sub_module 如果已經安裝nginx,只需要再添加這個模塊就可以了。

一、安裝:

nginx官網下載安裝包:http://nginx.org/en/download.html

# wget http://nginx.org/download/nginx-1.11.5.tar.gz

# tar -zxvf nginx-1.11.5.tar.gz

# cd nginx-1.11.5

# ./configure --with-http_stub_status_module --with-http_sub_module && make && make install

二、常用指令:

2.1 sub_filter指令: sub_filter string(原字符串) replacement(用於替換的字符串);

用於設置需要使用說明字符串替換說明字符串.string是要被替換的字符串,replacement是 新的字符串,它里面可以帶變量。

2.2 sub_filter_last_modified指令: sub_filter_last_modified on | off;

用於設置網頁內替換后是否修改 可在nginx.conf的 http, server, location三個位置配置使 用,默認值是off;

2.3 sub_filter_once指令:sub_filter_once on | off;

用於設置字符串替換次數,默認只替換一次。如果是on,默認只替換第一次匹配到的到字 符,如果是off,那么所有匹配到的字符都會被替換;

2.4 sub_filter_types指令:sub_filter_types *

用於指定需要被替換的MIME類型,默認為“text/html”,如果制定為*,那么所有的;

說明:以上指令可在nginx.conf的http, server, location三個位置配置使用;

三、反向代理動態替換網頁內容實例參考:

upstream www.iptest.cn {

server 118.184.180.46:80;

}

#反向代理,如果有多個服務端ip,還可以添加負載均衡方式,權重等策略#

server {

listen 80;

#監聽端口#

server_name www.iptest.cn;

#設置server name#

charset utf-8;

#設置字符編碼為utf-8,可根據實際情況調整#

location / {

proxy_pass http://www.iptest.cn$request_uri;

#反向代理規則#

proxy_set_header Accept-Encoding deflate;

#設置反向代理頭部,有時候源站響應的是gzip格式,替換的時候會有問題,可通過此項解決#

subs_filter '183.251.160.127' '123.181.128.17';

#替換指定ip,此處將183.251.160.127替換成123.181.128.17#

subs_filter '福建省龍岩市 移動' '河北省唐山市 電信';

#替換城市、運營商信息,nginx此替換模塊支持中文替換#

subs_filter_types text/html;

#指定被替換的MIME類型#

sub_filter_once on;

#指定字符串替換次數,on表示只替換第一次匹配到的字符,off表示替換所有匹配到的字符#

}

}

說明:

1、此模塊替換不區分大小寫;

2、支持中文替換;

Nginx.conf 完整配置:

使用Nginx反向代理和內容替換模塊實現網頁內容動態替換功能

實驗效果截圖:

使用Nginx反向代理和內容替換模塊實現網頁內容動態替換功能

使用Nginx反向代理和內容替換模塊實現網頁內容動態替換功能

結束語:

另外一個類似的內容替換模塊nginx_substitutions_filter,有興趣的可以做下實驗玩玩。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM