在Apache配置反向代理即实现输出内容替换
转自: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配置反向代理即实现输出内容替换相关推荐
- Linux Apache 配置反向代理
最近遇到一个项目,需要访问某单位的内网服务器,对方要求必须要配置一个前置机,来转发所有的web请求,然后就学了一下反向代理,查了一些资料,也完成了HelloWorld的例子. 关于反向代理的介绍,可以 ...
- apache配置反向代理以及实现url重写,防盗链
反向代理配置: 在apache配置文件中加上这一句 反向代理google(已测试) 安装mod_ssl模块:yum -y install mod_ssl 实现url重写: 在apache配置文件中加上 ...
- apache配置反向代理(通过不同端口访问不同目录)
可参考:https://www.cnblogs.com/liyuanhong/articles/7355545.html 一.开启apache代理模块,开启vhost虚拟主机功能 开启代理模块,编辑h ...
- apache 反向代理_通过 Apache 与 Nginx 配置 AJP 配置反向代理
↑ 点击上面 "时代Java"关注我们, 关注新技术,学习新知识! 前言 目前,随着公有云的出现,一些大型的服务提供商将很多的基础服务以公有云的形式发布出来,而企业则可以使用这些基 ...
- ci框架 反向代理配置_通过 nginx-proxy 实现自动反向代理和 HTTPS
本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part3 系列大纲 这次我们讲第三篇: 用 ...
- 【转】Apache配置正向代理与反向代理
1. 正向代理 配置正向代理很简单,此处我们配置vhost来实现代理, 只需要在浏览器的Proxy选项里加入你的Apache配置的vHost主机即可 1.1 开启Apache代理模块并引入vhost配 ...
- ci框架 反向代理配置_docker-compose配置Nginx反向代理禅道
本次项目会用到3个镜像分别是nginx.mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可 mysql与禅道镜像下载与构建参考:mysql 禅道 目录介绍 cloud # 文件名 + ...
- Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践
欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...
- Apache配置一级反向代理和二级反向代理实现目录网站管理
一级反向代理:就是从A站配置到B服务器站 二级反向代理:就是在B站服务器基础上再分到C服务器站 1.设置httpd.conf 打开Apache24/conf文件夹下的httpd.conf设置文件,找到 ...
最新文章
- 246.三元图的应用与绘图实战
- Mac 安装 Eclipse
- angularjs里对JS的lowercase和uppercase的完善
- 设计模式 - 适配器模式
- ustc小道消息20211225
- android 蓝牙耳机 sco,使用Android识别器内置蓝牙耳机
- [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
- Lowest Common Multiple Plus ——ACM
- 通过关闭UseDNS和GSSAPIAuthentication选项加速SSH登录
- .net 下载文件几种方式
- 一个文科小白的数据分析师之路
- 非谓语动词作后置定语
- c语言 源文件未编译,源文件未编译什么意思
- excel 复制粘贴
- Camunda流程引擎事件(Events)介绍
- 电脑路由器,怎么把自己的电脑变成路由器
- Android图片处理Glide 4 介绍
- 读书笔记:《编程之美》
- c语言钻石字母图案,PS制作排列组合闪亮钻石文字图片
- 聘用人员职务犯罪要如何处理
热门文章
- Spring Boot结合spring-data-jpa
- 洛谷——P1781 宇宙总统
- 2020云栖大会,宜搭发布专业开发者能力,助力政企数字化转型——阿里云开发者社区
- 【千字分析】剑指 Offer 47. 礼物的最大价值
- 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告
- 集群(三)——haproxy+nginx搭建web集群
- MyEclipse 打包和发布的个人总结 .
- flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...
- c语言游戏注入dll能干什么,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
- mysql5.7重置密码windows_MySql 5.7 for Windows 重置root密码