由于需要在windows系统上实现一个反向代理功能,因此就考虑到使用apache。
Apache具有反向代理的功能。通过对文件httpd.conf,进行简单的设置,即可以实现反向代理功能。但是被代理的服务中,如果包含有绝对路径的话,代理设置则无效。如Apache中的相关文档说明:被代理的页面中的所有绝对路径的连接都会突破代理机制而直接取得。
也即,不能在被代理的服务中包含有绝对路径。而且,经过我的测试,在下面三类地址中,类似于
第1类,<a href="test/index2.jsp">test</a>
第2类,<a href="<%=request.getContextPath()%>/index2.jsp">backToIndex2</a>
第3类,<a href="http://10.1.1.1/internal1/test/index2.jsp">AllPathTest</a>
如果我的设置信息如下:
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /test1/ http://10.1.1.1/
<Location /test1/>
ProxyPassReverse /
</Location>
</IfModule>
则只有第1类地址能够正常跳转,显示正确内容,而第2,3类地址则不行。
但是如果我的设置文件修改为:
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass / http://10.1.1.1/
<Location />
ProxyPassReverse /
</Location>
</IfModule>
则只有第3类地址不能正常跳转。第1,2类能够正常跳转。
在第2次配置中,是因为把地址http://10.1.1.1/映射为/,所以第2类地址才能正确显示。但实际上,如果使用apache作为反向代理,至少会映射到内网的多个地址会映射,因此不可避免,需要使用类似于第1次中的配置,如果这样的话,那就是说反向代理不能处理第2,3类地址了。
我不知道目前使用apache作为反向代理的实例多不多。我觉得,既然有这样对地址的严格限制,想轻松的使用起来并不简单。
如何解决反向代理的绝对路径问题呢?
经过一翻google,发现搜索到的内容基本上如apache文档所说,不适用于绝对路径的情况。但还是找到了一条很有用的信息,mod_proxy_html模块。鉴于目前的google中文搜索结果中,基本上没有提到mod_proxy_html和解决反向代理绝对路径的问题。因此记下这个设置过程,希望能对其他人有所帮助。
mod_proxy_html模块:提供在反向代理过程中,重写HTML links的功能。
最新的mod_proxy_html版本为3.0.1,在此我使用的是mod_proxy_html3.0.0版本,注意:它与之前的mod_proxy_html2.5版本有较大的区别。从3.0版本开始,使用了一个独立的配置文件proxy_html.conf。
环境:window 平台中使用apache实现反向代理。
1,下载Apache2.2,安装。
2,下载mod_proxy_html-3.0.0-w32.zip。
3,下载并安装the Visual C++ 2005 SP1 Redistributable Package (the binary is build with VC 2005 SP1),下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=en
4,新建文件夹.../apache2/modules/mod_proxy_html/ 并复制mod_proxy_html.so和
libxml2.dll到该文件夹。
5,复制httpd.exe.manifest文件到.../apache2/bin中。
6,复制proxy_html.conf到.../apache2/conf中。
7,修改配置文件httpd.conf:
在LoadModule的配置中,去掉与proxy有关的模块的注释,即去掉#符合,
去掉LoadModule headers_module modules/mod_headers.so的注释,
8,在httpd.conf中添加:
LoadModule proxy_html_module modules/mod_proxy_html/mod_proxy_html.so
Include conf/proxy_html.conf
9,再对proxy_html.conf进行相关的设置:
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyHTMLExtended On
ProxyPass /test1/ http://10.1.1.1/
<Location /test1/>
ProxyPassReverse /
ProxyHTMLURLMap http://10.1.1.1 /test1
SetOutputFilter proxy-html
ProxyHTMLURLMap / /test1/
RequestHeader unset Accept-Encoding
</Location>
</IfModule>
重新启动apache,即可。
此时apache中就包含了mod_proxy_html模块。
最重要的设置元素:
ProxyHTMLURLMap http://10.1.1.1 /test1
设置返回的html内容的重写规则,使用/test1代替http://10.1.1.1,此时即可以全部处理上述所说的三种类型的地址了。
分享到:
- 2008-09-16 15:51
- 浏览 5288
- 评论(0)
- 论坛回复 / 浏览 (0 / 10363)
- 查看更多
相关推荐
Apache是一款广泛使用的Web服务器软件,不仅能够处理静态页面,还支持动态内容处理,并具备多种高级功能,如反向代理和负载均衡。本文将深入探讨Apache反向代理与负载均衡的配置及应用,帮助读者更好地理解和掌握这...
要启用反向代理功能,我们需要在Apache的配置文件`httpd.conf`中进行相应的设置。首先,我们需要确保`mod_proxy`模块已经被加载,可以在配置文件中添加或取消注释以下行: ```apacheconf LoadModule proxy_module ...
Apache反向代理
linux apache反向代理配置,写的有点乱,但是可以用,里面有说明文档 先弄 apache和tomcat整合 把80端口给apache 举例 tomcatA 8080 tomcatB 8081 在apache的httpd.conf里写反向代理,用户名指向tomcat的端口,具体...
这种配置允许Apache作为面向公众的入口点,处理SSL加密、负载均衡和静态内容服务,而WebLogic则专注于处理动态应用程序逻辑。以下是对这一主题的详细说明: 1. **Apache 安装**: - 解压Apache HTTP Server的...
本文详细介绍了 Linux 下安装 Apache 及反向代理配置的完整过程,从关闭防火墙到配置反向代理,都是 Apache 服务器安装和配置过程中的重要步骤。通过遵循本文的步骤,可以成功安装和配置 Apache 服务器,并实现反向...
Apache负载均衡和反向代理配置文件开启的模块及代码配置方法。。。。。。。。。。。。。。。。。。。
介绍如何使用apache进行反向代理的配置,以及配置中遇到的一些问题如何解决
反向代理反向代理反向代理反向代理反向代理反向代理反向代理反向代理反向代理
### 使用Apache配置反向代理服务器 #### 一、反向代理的基本概念 反向代理(Reverse Proxy)是一种网络架构模式,其中代理服务器接收来自互联网的请求,并将其转发给内部网络中的真实服务器。处理完请求后,代理...
### Apache反向代理知识点详解 #### 一、测试环境与网络结构 在开始之前,我们需要了解测试环境的具体配置。本文采用的是Redhat Linux 7.2操作系统,搭配Apache 1.3.24版本,假设公司的域名为company.com。网络...
apache tomcat 反向代理,http502错误,百度搜的解决不了问题 a.com 可以访问,www.a.com 无法访问http502错误
windows下配置Apache双向认证和反向代理(Apache+配置文档)
【IIS与Apache反向代理】是指在一台服务器上,结合使用Microsoft的Internet Information Services (IIS) 和Apache HTTP Server,实现两者之间的协同工作,通过反向代理技术将请求分发到不同的服务环境中。...
【Apache+SSL安全反向代理配置案例】 Apache作为一款广泛应用的开源HTTP服务器,常常被用于构建网站服务。SSL(Secure Socket Layer)则是提供网络安全传输的一种协议,常用于加密通信,确保数据在传输过程中不被...