本文主要講 如何全域性替換站點指定字串、如果製作docker容器映象、如何使用dockerfile製作映象、nginx含外掛編譯。
複製程式碼
前言
前段時間某個場景需要將我們產品中的一些文字替換成另外的一些文字,比如原來全站http改為https(或者將http://改為//);比如CDN節點地址替換;比如原來是AAA產品,現在需要改為BBB產品;比如原來網站名叫CCC,現在改為DDD等。類似的需求,如果一個個改,會耗費不少時間,而且難免會遺漏。於是,臨時解決方案:使用nginx的ngx_http_substitutions_filter_module
模組進行全域性替換。
可能有人說,這樣替換效能不是有損耗嗎?我覺得可以限定http返回頭(application/xml
application/javascript
text/css text/xml
),對於圖片啊,檔案啊啥的不替換;其次,也可以提高nginx在叢集中的副本數量。
認識nginx內容替換模組
ngx_http_substitutions_filter_module是一個可替換內容的nginx外掛,
可支援:
- 中英文替換
- 正則替換
- 支援多種替換邏輯
具體替換邏輯及使用如下如下:
subs_filter source_str destination_str [引數]
- g(default): 全部替換
- i: 不許分大小寫替換.
- o: 只替換一次
- r: 正規表示式
作用域:
- http
- server
- location
支援過濾mine內容型別:
subs_filter_types mime-type [mime-types]
編譯
本文均使用docker環境下編譯,非docker環境,只需忽略docker基礎映象部分即可。
使用centos基礎映象
docker run --name subs_filter_ng -i -t -p 80:80 centos:latest /bin/bash
複製程式碼
下載所需元件
yum -y install wget
yum -y install unzip
yum -y install gcc-c++
yum -y install gcc automake autoconf libtool make
複製程式碼
下載所需檔案
cd ~
wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar zxvf nginx-1.8.0.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar zxvf zlib-1.2.11.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz
tar zxvf pcre-8.37.tar.gz
wget https://www.openssl.org/source/openssl-1.0.1q.tar.gz
tar zxvf openssl-1.0.1q.tar.gz
wget -O ngx_http_substitutions_filter_module-master.zip https://github.com/yaoweibin/ngx_http_substitutions_filter_module/archive/master.zip
unzip ngx_http_substitutions_filter_module-master.zip
複製程式碼
編譯
cd /root/nginx-1.8.0
./configure --sbin-path=/root/nginx-1.8.0/nginx --conf-path=/root/nginx-1.8.0/nginx.conf --pid-path=/root/nginx-1.8.0/nginx.pid --with-http_ssl_module --with-pcre=/root/pcre-8.37 --with-zlib=/root/zlib-1.2.11 --with-openssl=/root/openssl-1.0.1q --with-http_stub_status_module --add-module=/root/ngx_http_substitutions_filter_module-master/ --prefix=/root/nginx-1.8.0
make
make install
複製程式碼
配置
修改 /root/nginx-1.8.0/nginx.conf 檔案。
可以放到server裡,也可以放入http、location。
subs_filter_types application/xml application/javascript text/css text/xml;
subs_filter `http` `https`;
複製程式碼
記得把第一行換位user root;
,要去掉前面註釋。
執行
./nginx -c /root/nginx-1.8.0/nginx.conf
複製程式碼
vi不支援中文解決方案
cat << EOF > /root/.vimrc
:set encoding=utf-8
:set fileencodings=ucs-bom,utf-8,cp936
:set fileencoding=gb2312
:set termencoding=utf-8
EOF
複製程式碼
打包成映象
docker commit -m "nginx" b668 nginx/subs_filter_nginx:v1
複製程式碼
其中b668為容器id
dockerfile
這裡可以將上述指令碼編寫為一個dockerfile檔案,方便以後使用。
總結
這樣一個可以替換內容的nginx映象就誕生了,希望通過本文的例子能幫助大家理解nginx編譯過程(畢竟nginx不像其他apache啥的增加模組只需要引入檔案即可,nginx增加模組都需要重新編譯)。