与前向代理服务器不同的是,逆(反)向代理服务器的用户并不知道它们连接的是代理服务器而不是资源服务器本身。其结构如下图4所示:
图4 反向代理 点击看大图 |
当使用了mod_cache配置一个逆(反)向代理后,它可以作为一个比较慢的web服务器的缓冲来使用。反向代理也可以启用高级URL策略和管理技术,从而使处于不同web服务器系统或是体系的web页面同时存在于同一个URL空间下。逆(反)向代理对于实现具有很多或不同的web站点后端的集中管理非常理想。复杂的多层服务器系统可以使用一个Apache的mod_proxy前端和任意数量的后端web服务器来进行架构。
逆(反)向代理使用ProxyPass和ProxyPassReverse指令进行配置。可以使用mod_cache和正向代理结合启用缓冲功能。
ProxyPass 指令将一个远端服务器映射到本地服务器的URL空间中,对于我们不想对某个子目录进行反向代理时很有用。例如:
ProxyPass /mirror/ghq/i !
ProxyPass /mirror/ghq http://ghq.com
将会代理除对/mirror/ghq/i请求之外的所有对 ghq.com 的/mirror/ghq请求。
ProxyPassReverse 指令调整由反向代理服务器发送的HTTP回应头中的URL。此指令使 Apache 调整HTTP重定向回应中Location,Content-Location和URI头里的URL。这就是Apache在作为逆(反)向代理使用时,避免以因为位于反向代理之后的后端服务器的HTTP重定向造成的绕过反向代理的实质。
路径是本地虚拟路径的名称,url远端服务器的部分URL,与ProxyPass指令中的使用方法相同。例如:
假定本地服务器Web地址为http://study.com/,那么下面两句实现逆(反)代理功能:
ProxyPass /mirror/ghq/ http://ghq.com/
ProxyPassReverse /mirror/ghq/ http://ghq.com/
简要说明:我们不仅会把所有对<http://study.com/mirror/ghq/bar>的请求直接转为对 <http://ghq.com/bar> 的代理请求(由ProxyPass提供的功能)。它还会改变服务器ghq.com的发送:当http://ghq.com/bar被它重定向到http://ghq.com/quux时,Apache会在前转HTTP重定向回应到客户端之前调整它为http://study.com/mirror/ghq/quux。
目前新版本的Apache v 1.3.x的mod_proxy的缓冲功能已经从mod_proxy中移除并入了一个新模块--mod_cache。Apache 2.0.x的Proxy不再支持缓冲了,所有的缓冲功能已经移入了mod_cache;mod_cache现在已经能支持任何内容的缓冲了,而不仅是通过代理的内容。