`
fly_ever
  • 浏览: 153775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache的反向代理中如何处理绝对路径

阅读更多
    由于需要在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,此时即可以全部处理上述所说的三种类型的地址了。
分享到:
评论

相关推荐

    利用Apache作反向代理

    在Apache中实现反向代理主要依赖于 mod_proxy 模块,该模块允许Apache服务器转发HTTP和HTTPS请求。首先,我们需要确保Apache服务器已经安装了mod_proxy模块。在Debian或Ubuntu系统中,可以通过运行以下命令来安装: ...

    ueeditorpro.zip

    避免暴露敏感的服务器路径,可以通过设置Nginx或Apache等反向代理服务器,隐藏实际的服务器路径。同时,确保上传的文件经过安全检查,防止恶意文件的上传。 5. **测试与调试**: 修改配置后,务必进行充分的测试,...

    nginx中location中关于proxy_pass和rewrite的应用.rar

    当我们谈论`proxy_pass`和`rewrite`时,这是两种强大的功能,它们可以协同工作以实现复杂的URL路由和反向代理设置。下面我们将深入探讨这两个指令的工作原理、用法以及它们在实际场景中的应用。 1. **proxy_pass**...

    数据抓取中gerapy的安装,超详细的教程。包括gerapy,scrapy,scrapyd,nginx配置等等。

    为了实现后台自动启动,我们需要安装`supervisor`,并配置`scrapyd.conf`文件,指定Scrapyd的绝对路径。使用`supervisorctl`管理守护进程状态,如查看、重启或重载。 Nginx作为反向代理服务器,可以提供负载均衡和...

    php环境配置教程(绝对真实,图文并茂)

    Apache和Nginx是最常用的服务器软件,Apache以其易用性和丰富的插件而闻名,Nginx则以其高效的性能和反向代理功能受青睐。 3. **数据库**:PHP常常用于动态网站开发,这需要与数据库交互。MySQL是最常见的选择,它...

    nginx rewrite规则

    在Web服务器领域,Nginx以其高效、轻量级的特性,被广泛用于处理静态内容和反向代理。其中,`rewrite`规则是Nginx的一项重要功能,它允许我们重写URL,实现动态路由、URL美化等目的。与Apache的`mod_rewrite`模块...

    脚本包含了对前端和后端项目的部署

    2. **额外的配置步骤**:根据具体需求,可能还需要添加更多步骤,比如配置Web服务器(如Nginx/Apache)、配置反向代理、配置SSL证书等。 3. **容器化部署**:如果采用Docker或Kubernetes等容器化技术,则部署脚本将...

    Web安全面试题及答案

    2. **网站路径**: 需要知道网站文件系统的绝对路径。 #### 八、目前已知哪些版本的容器有解析漏洞,具体举例 1. **IIS 6.0**: 存在文件解析漏洞,例如`xx.asp/xx.jpg`,其中`xx.asp`是文件夹名。 2. **IIS 7.0/7.5...

    Nginx服务器中为网站或目录添加认证密码的配置详解

    Nginx是高性能的HTTP和反向代理服务器,广泛应用于部署网页服务中。在很多场景下,网站维护者可能需要为特定的网站或目录增加访问控制,以保护网站安全。这就涉及到如何在Nginx中配置访问认证,确保只有拥有合法凭证...

Global site tag (gtag.js) - Google Analytics