架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 574|回复: 0

[Web] 使用Nginx反向代理和内容替换模块实现网页内容动态替换

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-2 11:47:27
zu
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,有兴趣的可以做下实验玩玩。



效果图:



配置代码:

  1. server {
  2.         listen       80;
  3.         server_name  www.sb.com;

  4.                
  5.                 location / {
  6.                         proxy_set_header Accept-Encoding deflate;
  7.             proxy_pass https://www.itsvse.com;
  8.                         proxy_set_header Referer https://www.itsvse.com;
  9.                         sub_filter 'https' 'http';
  10.                         sub_filter 'www.itsvse.com' 'www.sb.com';
  11.                         sub_filter_once off;
  12.         }
  13.         error_page   500 502 503 504  /50x.html;
  14.         location = /50x.html {
  15.             root   html;
  16.         }
  17.     }
复制代码






上一篇:Spring JPA save和saveAndFlush的区别
下一篇:IT黑名单查询,网友爆料共享的,仅供参考
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-9-23 08:38

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表