转自:https://blog.csdn.net/benwdm/article/details/83847736

最近有个地方的项目需要搭建一个演示环境。该演示环境是在公司现有系统基础上来搭建的,所有测试数据也从现有系统中导入,但由于新客户(B客户)与现有客户(A客户)所属行业不同,为了演示环境有更逼真的演示效果,需要把测试数据及应用系统中页面上有关A客户的信息都改成B客户。

如果直接在应用程序及测试数据中来修改,工作量很大,而且容易遗漏。

另外有个办法就是实现一个HttpServletFilter来对输出内容进行过滤。这种方式比第一种方式要好一些,可以实现多数内容的替换,但对于一些静态文件,还是无法满足要求。

基于第二种办法的思路,我想出在应用服务器前用一个HTTP 服务器来作反射代理,客户端直接访问HTTP服务器,HTTP服务器向应用服务器请求数据,然后把需要替换的内容进行替换,最后把替换后的结果返回给客户端。

目前比较主的HTTP服务器(非JAVA的HTTP服务器)主要是LightTPD, Nginx和Apache。Apache是元老级的HTTP服务器,功能强大自不必说,但经过这么多年的扩充,身躯也是臃肿庞大。lighttpd是最轻量级的,我先试用lighttpd。

在lighttpd中配置反向代理时发现,lighttpd对域名支持上有些问题,于是放弃lighttpd改用Nginx。

Nginx在功能上与Apache相似度要高于lighttpd。配置反向代理还是比较顺利,但到了配置输出内容替换功能时,却找遇到一个问题解决不了。在Nginx中,使用HttpSubstitution模块来实现内容替换,该组件对英文的支持还算完美,但对于中文(我的系统是GBK字符集,UTF-8没试),却怎么也无法查找替换,在网上翻了很久,也没有找到在效的解决办法。只好把Nginx也枪毙了,剩下的只有Apache了,Apache应该感觉鸭梨很大。
    在Apache中配置反射代理也很顺利,只有一个地方需要注意一下:在目标服务域名后面要加上"/"。接下来是配置输出内容替换功能,在网络上能找到的几个可以实现内容替换的组件: mod_substitude.so、mod_sed.so、mod_line_edit.so,可以是当我尝试使用这几个组件进行替换时,对英文内容工作良好,但对中文的处理,跟Nginx一样,总是无法查找指定的关键字词并替换。就这几个组件,来来回回地修改配置,测试,花了大半天时间,还是无法解决。

在感觉到无计可施时,突然看到Apache还有一个mod_ext_filter组件,通过该组件,可以调用一个外部程序来实现filter功能,我可以试试用一个sed程序来代替mod_sed.so,看看能不能正常处理中文。我以前保留了一套windows下的Unix/Linux小工具,其中就包括了sed.exe。我就把sed.exe复制到apache/bin目录下,然后在http-fitler.conf中增加如下配置:

## mod_ext_filter directive to define a filter which
## replaces text in the response
##
ExtFilterDefine fixtext mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/北京/上海/g"
ExtFilterDefine fixtext1 mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/劳动局/财政厅/g"<Location />
# core directive to cause the fixtext filter to
# be run on outputSetOutputFilter fixtext;fixtext1
</Location>

然后重启apache,

再访问,演示系统的关键词完美地被替换成目标词。We did it!

另外网上有个使用了跟我一样的方法:

http://www.phwinfo.com/forum/alt-apache-configuration/226022-apache-windows-extfilterdefine-output-sed.html

mod_ext_filter的中文手册:

http://www.phpchina.com/manual/apache/mod/mod_ext_filter.html

附上本次配置的三个关键配置文件及sed.exe程序:
httpd.conf

ServerRoot "/xampp-win32-1.7.4/apache"Listen 80LoadModule actions_module modules/mod_actions.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule status_module modules/mod_status.so
LoadModule substitute_module modules/mod_substitute.so<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon
Group daemon</IfModule>
</IfModule>ServerAdmin postmaster@localhostServerName localhost:80DocumentRoot "/xampp-win32-1.7.4/htdocs"<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowDeny from all
</Directory><Directory "/xampp-win32-1.7.4/htdocs">Options Indexes FollowSymLinks Includes ExecCGIAllowOverride AllOrder allow,denyAllow from all</Directory><IfModule dir_module>DirectoryIndex index.shtml index.html index.htm \default.shtml default.html default.htm \home.shtml home.html home.htm
</IfModule><FilesMatch "^\.ht">Order allow,denyDeny from allSatisfy All
</FilesMatch>ErrorLog "logs/error.log"LogLevel warn<IfModule log_config_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>CustomLog "logs/access.log" combined
</IfModule><Directory "/xampp-win32-1.7.4/cgi-bin">AllowOverride NoneOptions NoneOrder allow,denyAllow from all
</Directory>DefaultType text/plain# Server-pool management (MPM specific)
Include "conf/extra/httpd-mpm.conf"# Multi-language error messages
Include "conf/extra/httpd-multilang-errordoc.conf"# Fancy directory listings
Include "conf/extra/httpd-autoindex.conf"# Language settings
Include "conf/extra/httpd-languages.conf"# Implements a proxy/gateway for Apache.
Include "conf/extra/httpd-proxy.conf"# 设置过滤器
Include "conf/extra/httpd-filter.conf"# Various default settings
Include "conf/extra/httpd-default.conf"

httpd-proxy.conf

<IfModule proxy_module>
<IfModule proxy_http_module>#
# Reverse Proxy
#
ProxyRequests Off
<Proxy *>Order deny,allowAllow from all
</Proxy>
ProxyPass / http://www.demo.com/
ProxyPassReverse / http://www.demo.com/</IfModule>
</IfModule>

http-filter.conf (该文件是我自己加的)

## mod_ext_filter directive to define a filter which
## replaces text in the response
##
ExtFilterDefine fixtext mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/厦门/上海/g"
ExtFilterDefine fixtext1 mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/地税/财政/g"<Location />
# core directive to cause the fixtext filter to
# be run on outputSetOutputFilter fixtext;fixtext1
</Location>

在Apache配置反向代理即实现输出内容替换相关推荐

  1. Linux Apache 配置反向代理

    最近遇到一个项目,需要访问某单位的内网服务器,对方要求必须要配置一个前置机,来转发所有的web请求,然后就学了一下反向代理,查了一些资料,也完成了HelloWorld的例子. 关于反向代理的介绍,可以 ...

  2. apache配置反向代理以及实现url重写,防盗链

    反向代理配置: 在apache配置文件中加上这一句 反向代理google(已测试) 安装mod_ssl模块:yum -y install mod_ssl 实现url重写: 在apache配置文件中加上 ...

  3. apache配置反向代理(通过不同端口访问不同目录)

    可参考:https://www.cnblogs.com/liyuanhong/articles/7355545.html 一.开启apache代理模块,开启vhost虚拟主机功能 开启代理模块,编辑h ...

  4. apache 反向代理_通过 Apache 与 Nginx 配置 AJP 配置反向代理

    ↑ 点击上面 "时代Java"关注我们, 关注新技术,学习新知识! 前言 目前,随着公有云的出现,一些大型的服务提供商将很多的基础服务以公有云的形式发布出来,而企业则可以使用这些基 ...

  5. ci框架 反向代理配置_通过 nginx-proxy 实现自动反向代理和 HTTPS

    本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part3 系列大纲 这次我们讲第三篇: 用 ...

  6. 【转】Apache配置正向代理与反向代理

    1. 正向代理 配置正向代理很简单,此处我们配置vhost来实现代理, 只需要在浏览器的Proxy选项里加入你的Apache配置的vHost主机即可 1.1 开启Apache代理模块并引入vhost配 ...

  7. ci框架 反向代理配置_docker-compose配置Nginx反向代理禅道

    本次项目会用到3个镜像分别是nginx.mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可 mysql与禅道镜像下载与构建参考:mysql   禅道 目录介绍 cloud # 文件名 + ...

  8. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践

    欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...

  9. Apache配置一级反向代理和二级反向代理实现目录网站管理

    一级反向代理:就是从A站配置到B服务器站 二级反向代理:就是在B站服务器基础上再分到C服务器站 1.设置httpd.conf 打开Apache24/conf文件夹下的httpd.conf设置文件,找到 ...

最新文章

  1. 246.三元图的应用与绘图实战
  2. Mac 安装 Eclipse
  3. angularjs里对JS的lowercase和uppercase的完善
  4. 设计模式 - 适配器模式
  5. ustc小道消息20211225
  6. android 蓝牙耳机 sco,使用Android识别器内置蓝牙耳机
  7. [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
  8. Lowest Common Multiple Plus ——ACM
  9. 通过关闭UseDNS和GSSAPIAuthentication选项加速SSH登录
  10. .net 下载文件几种方式
  11. 一个文科小白的数据分析师之路
  12. 非谓语动词作后置定语
  13. c语言 源文件未编译,源文件未编译什么意思
  14. excel 复制粘贴
  15. Camunda流程引擎事件(Events)介绍
  16. 电脑路由器,怎么把自己的电脑变成路由器
  17. Android图片处理Glide 4 介绍
  18. 读书笔记:《编程之美》
  19. c语言钻石字母图案,PS制作排列组合闪亮钻石文字图片
  20. 聘用人员职务犯罪要如何处理

热门文章

  1. Spring Boot结合spring-data-jpa
  2. 洛谷——P1781 宇宙总统
  3. 2020云栖大会,宜搭发布专业开发者能力,助力政企数字化转型——阿里云开发者社区
  4. 【千字分析】剑指 Offer 47. 礼物的最大价值
  5. 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告
  6. 集群(三)——haproxy+nginx搭建web集群
  7. MyEclipse 打包和发布的个人总结 .
  8. flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...
  9. c语言游戏注入dll能干什么,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
  10. mysql5.7重置密码windows_MySql 5.7 for Windows 重置root密码