https://blog.csdn.net/xiaoyao8903/article/details/53244900
lnmp.org 脚本本身安装好了 直接用 害我搞好久 sub_filter_once off;
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_substitutions_filter,有兴趣的可以做下实验玩玩。
https://www.cnblogs.com/cyq632694540/p/7132778.html
nginx之所以轻,因为默认没有安装各种各样的扩展;
nginx安装扩展插件:
下面列出两个可能会用到的插件
一、sub_filter内容过滤器,这个在nginx做http转发的时候会很常用
1.下载插件>git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git

2.安装插件
**如果你还没有安装nginx的,配置的时候./configure ..... 加上 --add-module=/tmp/ngx_http_substitutions_filter_module 这段话进行配置;
**如果你已经安装了nginx的,找到你的nginx源安装目录如
>cd nginx-1.11.0 //进入nginx安装目录
>./configure --prefix=/usr/local/nginx --add-module=/tmp/cyq/ngx_http_substitutions_filter_module //prefix指定你安装好的nginx目录,add-module指定你下载的sub_filter插件目录

>make //这边注意了,不要make install,只需要make编译一下,然后在当前目录的./objs/下面就会更新nginx启动文件
>mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old //先pkill -9 nginx 停止nginx服务
>cp ./objs/nginx /usr/local/nginx/sbin/nginx //把编译生成的文件放到你的nginx启动目录里面
>/usr/local/nginx/sbin/nginx //启动nginx就行了

3.打开自己的网站,内容是 this is php in 192.168.199.167

在对应的nginx.conf 文件中,添加需要进行过滤的数据内容
vi nginx.conf

将this is 改为 my name is

是不是很强大呢?毕竟nginx是属于第七层应用层领域的,所以转发的内容可以随意修改;这个插件可以用于建设小偷网站,就是域名是自己的,但是你转发到其他网站的时候,里面很多数据都暴露了网站内容属于其他人的
这个时候你就可以使用sub_filter来做内容过滤了!哈哈哈哈!
二、nginx无法转发到https网站
会报以下错误:
nginx: [emerg] https protocol requires SSL support in xx/xxx/xx/
这个很简单,不过网上说什么缺少ssl模块啦,还要安装证书啦,巴拉巴拉一大堆。(这些只是针对网站需要证书验证访问才需要的)
一般的访问https失败,只是因为nginx没有安装两个模块http_ssl_module和http_stub_status_module
解决步骤:
1.进入nginx安装目录
>cd /xx/nginx-1.11.0
>./configure --with-http_stub_status_module --with-http_ssl_module
>make
>cp ./objs/nginx /usr/local/nginx/sbin/nginx //先停止nginx,然后吧nginx覆盖掉
>/usr/local/nginx/sbin/nginx //再次启动nginx就可以了
