随手打造可以替换全站字符串的nginx镜像docker
本文主要讲 如何全局替换站点指定字符串、如果制作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增加模块都需要重新编译)。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhkiie
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01