专栏首页小狼的世界使用Apache的Proxy模块实现对被代理网站的访问

使用Apache的Proxy模块实现对被代理网站的访问

最近有个需求,原本一个动态的站点,有些页面要静态化。但是静态化的文件又不希望和动态程序放在一起。并且URL也不希望发生变化,于是考虑使用Rewrite来实现。下面是一些使用的心得。

1、使用Rewrite规则来实现

Apache 的 Rewrite 是一个非常强大的工具,他的手册提供了丰富的实例可供我们学习,利用下面这个规则,可以将对www.a.com 这个网站的特定请求都定向到 www.b.com 服务器上。

ServerName www.a.com

RewriteEngine On

RewriteRule ^/a/(.*) http://www.b.com [P]

2、使用反向代理

ProxyRequests Off

ProxyPass       /a      http://house.baidu.com/bj

ProxyPassReverse /a     http://house.baidu.com/bj

ProxyPassReverseCookieDomain data.house.sina.com.cn l.house.sina.com.cn

ProxyPassReverseCookiePath / /a/

ProxyErrorOverride On

这两种方法都可以实现用 http://www.a.com/a/abc 的形式来访问实际上是 http://www.b.com/abc 的内容

但是,如果用户输入的URL在 www.b.com 中并不存在,www.b.com 发生转向时,会显示 www.b.com 的url

如果 www.b.com 上全是静态文件,文件无法访问到的时候,会导向404页面,默认导向被代理服务器的404。

但是使用 ProxyErrorOverride On 命令后,可以使用代理服务器的404页面。

访问的目标文件中,对于JS和CSS的链接。如果采用了相对链接,则会默认去 www.a.com 上请求相应的文件。

使用代理模式时,页面中对于Cookie的操作可能会有问题。以l.house.x.com.cn代理到data.house.x.com.cn做了实验,

bj/search/0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1.html 页面中的浏览历史出现了问题。

该指令允许你将一个远端服务器映射到本地服务器的URL空间中,此时本地服务器并不充当代理角色,而是充当远程服务器的一个镜像。

ProxyPass 支持构建一个连接池来提高服务器的服务性能。配置形式为在 URL 后面追加参数,如下:

ProxyPass /example http://backend.example.com smax=5 max=20 ttl=120 retry=300

其中

smax 表示Apache根据需要创建的连接数量。这些数量会在 ttl 设置到期前被 Apache 关闭。

max 表示 允许与被代理服务器链接的最大数量。默认的链接数量,是当前MPM中配置的最大链接数。在Prefork 模式中,这个数值永远是1.

在 Woker 模式中,连接数量由子线程来控制(ThreadsPerChild)。Apache创建的连接数量不会超过配置的数目。

ttl 表示以秒为单位,超过 smax 允许的非活动链接的存活时间。Apache会关闭超过 ttl 设置的非活动链接。

retry 表示连接池中为每次请求进行重试的最大时间限制,单位为秒。如果与被代理服务器之间的连接出现了问题,Apache在这个时间到期前,不会向客户端返回错误。

可以利用这个时间,对被代理服务器进行维护或重启等操作。

对于被代理服务器返回的重定向信息,可以使用 ProxyPassReverse 对其中的URL进行修改。只有明确指定的应答头会被重写,其它应答头保持不变,并且HTML页面中的URL也不会被修改。如果被代理的内容包含绝对URL引用,那么将会绕过代理。有一个第三方模块可以检查并改写HTML中的URL引用,该模块就是Nick Kew编写的mod_proxy_html

综合起来,要想实现这个目的,就必须使用 apache 的反向代理模块。

参考资料:

1、Apache URL重写

2、Proxy Module

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WAMP环境配置

    经过以上的步骤,一个 WAMP 的开发环境就配置好了,基本上能够满足开发一般应用的需要。

    大江小浪
  • Fedora 11 的安装以及 LAMP环境的搭建(一)

    最近,重新安装了一次系统,为了以后不再做无谓的重复查询的工作,特将本次安装及配置的过程记录下来,做为自己以后的一个参考,亦可以为想要安装 Fedora 桌面的同...

    大江小浪
  • Kubernetes基础:查看状态、管理服务

    在Kubernetes中创建一个Deployment 部署就会在Node上创建一个Pod,Pod是Kubernetes中对于一组容器以及与容器相关的资源的集合。...

    大江小浪
  • Flask第一篇——URL详解

    用户2149234
  • Apache虚拟主机-3

    192.168.124.222    www.abc.com     /var/www/abc

    py3study
  • 在Mono 2.8上部署ASP.NET MVC 2

    Mono 2.8发布:C#4.0和更好的性能,我们知道Mono 2.8对ASP.NET MVC 2的完全支持,下面我们就来测试下在Mono 2.8上部署ASP....

    张善友
  • 微信出现「五星级小程序」,看看你附近的是几颗星?

    6 月 21 日周三下午,知晓程序(微信号 zxcx0101)发现,微信又在悄悄地测试新能力了。

    知晓君
  • 零基础入门微信小程序开发

    最近一个小游戏“跳一跳”火得不得了,相信即使您自己没有玩过,身边的亲戚朋友也一定玩过。画面大致如下:

    Java编程指南
  • Spring Security 3 学习

           学习SpringSecurity3之前,我在网上找了很多关于SpringSecurity3的相关博客,写得都很好,刚开始我都看不懂,后来在ITEY...

    py3study
  • 【收】精心整理!小程序开发资源汇总(附带源码)

    ? 很多小伙伴想在春节放假期间学小程序,但是小程序学习的资源和教程可能不太好找。所以小助手精心整理了一期,全是干货!认真学,开启美妙的小程序开发之旅,做一个属...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券