apache配置反向代理的问题,求大神指点!

发布网友

我来回答

2个回答

懂视网

代理 服务器(proxyserver)是安装于防火墙上的应用程序,它把防火墙内部的局域网连接到Intemet上。 代理 服务器的功能如下。 ●监视通过防火墙的数据包并记录传输信息。 ●对通过防火墙的数据包地址进行过滤。 ●提供文件缓存功能。 代理 服务器可以根据所 代


  代理服务器(proxyserver)是安装于防火墙上的应用程序,它把防火墙内部的局域网连接到Intemet上。代理服务器的功能如下。
  ●监视通过防火墙的数据包并记录传输信息。
  ●对通过防火墙的数据包地址进行过滤。
  ●提供文件缓存功能。
  代理服务器可以根据所代理的服务类型分类,例如HTtP代理和FFP代理等。我们以HTTP代理为例,介绍代理服务器的功能。当局域网中的客户机使用HTIT代理服务器时,它的HTTP请求将被发送到代理服务器中,而不是直接发送到源地址。如果代理服务器配置了文件缓存功能,在接受到客户请求时,首先在缓存中检查是否有用户需要的内容。如果缓存中没有,就要从HTTP源地址检索,再把相应内容返回给用户。以后,如果用户再请求相同的内容,代理服务器将直接从缓存中提取。
  
  配置ApacheHTTP代理
  
  Apache作为WWW服务器软件,在内部提供了HTFP代理功能。下面我们将介绍Apache代理的配置方法:
  
  (1)修改文件/etc/httpd/conf/httpd.conf,在其中添加与代理和缓存相关的功能。与代理缓存有关的关键字如下所示。
  
  httpa.conf文件中与代理缓存有关的关键字
  ProxyRequests On/Off 启用或者禁用Apache代理功能
  
  Proxyremote path URL remote server 定义此代理服务器的远程代理。当用户请求与URL匹配时,就使用remote server作为远程代理服务器。
  
  其中remote server的格式是: protocol://hostname[:port],由于Apache只能代理HTTP服务,所以protocol值恒为HTTP
  
  ProxyPass path URL允许把远程服务器镜像到本地服务器中。这时,本地代理服务器好像是远程代理服务器的一个镜像
  
  ProxyBlock word/hostname/domain 代理服务器过滤功能。在ProxyBlock关键字以后定义了一组词语、节点名称和域名。如果用户的HTYP请求中包含了这里的词语、节点名称或者域名,请求将被过滤掉
  
  CacheRoot directory 代理缓存的根目录
  
  CacheSize size代理缓存大小,以KB为单位
  
  CacheGcInterval time每隔time小时检查缓存区,如果缓存占用空间超过CacheSize设置的上限,就删除文件缓存中的文件最多保存time小时,这里定义了文件的过期时间
  
  CacheLastModifiedFactor factor如果没有定义文件过期时间,就按照下面的公式计算:过期时间=最近一次修改的时间间隔*factor
  
  CacheDirLevels levels缓存中子目录的层数
  
  CacheDirLenSth lenSth代理缓存子目录名的字母数
  
  CacheDefauhExpire time 如果文件是通过一个不支持过期时间的协议获取的,则使用time作为过期时间
  
  NoCache word/hostname/domain 在NoCache关键字以后定义了一组词语、节点名称和域名。包含这些词语、节点名称或者域名的HTFP文件将不被缓存
  
  (2)修改文件/etc/httpd/conL/access.conf,在其中添加对代理目录的访问控制。下面是一个实例。
  
  
  
  order deny,allow
  deny from all
  allow from.company.com
  

  

  (3)确认CacheRoot关键字指定的缓存目录已经存在。
  重新启动hnpd,缓存功能就可以生效了。
  

热心网友

在IIS7之前,在windows上要实现该功能却不是一件容易的事情,但是在IIS7上,通过Application Request Routing模块,我们可以轻松实现反向代理
在配置web服务器的时候,我们经常遇到这样的问题,由于某些原因,该服务器只能拥有一个公网IP,但是可能需要提供其他机器或者本机上其他 webserver的服务器给访问者,同时又不希望使用其他端口,如果在linux下,常见的解决方案是使用nginx作为前端server,通过反向代 理间接访问其他webserver.在IIS7之前,在windows上要实现该功能却不是一件容易的事情,但是在IIS7上,通过 Application Request Routing模块,我们可以轻松实现反向代理.

本次测试配置的情况,简单起见,只在 iis中测试,配置3个网站,第一个”LevenWeb”,使用80端口提供服务,第二个”levenblog”,下面运行着 levenblog2.0.9,使用8080端口,第三个”phpweb”,下面有一个”test.php”的phpinfo页面(iis7 php配置本文不再详述),本机ip:192.168.1.8,为了测试,我们先进行域名绑定,也就是在leven.com.cn下新增3个子域名,域名 绑定如下图所示:

我们的目标如下:

  http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/

  http://levenblog.leven.com.cn/ 访问levenblog站点,也就是http://localhost:8080/

  http://realblog.leven.com.cn/ 访问公网上的levenblog站点,也就是http://leven.com.cn/

  http://localhost/leven 访问levenblog站点,也就是http://leven.com.cn/

  首先前往http://www.iis.net/extensions/ApplicationRequestRouting下载Application Request Routing,然后安装,本次实践使用的是V2版.

  安装完毕之后,新建3个站点:

  然后找到ARR配置菜单:

  开启Proxy项:

  然后在levenweb站点下配置反向代理路由,配置可以使用UI界面或者直接修改web.config的模式,本次配置给出ui和config文件两种方式,个人更喜欢config配置文件模式.

  进入该项,先配置第一项, http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/,选择”Add Rules...”:

  然后选择”Blank Rule”

  然后填写如下:

  图片看不清楚?请点击这里查看原图(大图)。

  该参数设置表面ARR将拦截所有请求

  继续在”Conditions”中选择”Add”:

  该设置表面只有HTTP_HOST为phpweb.leven.com.cn的URL才能通过该规则,如果您绑定了多个域名,可以根据多次增加或者通过正则表达式的|来间隔

  最后在下面的Action中配置代理路径:

  图片看不清楚?请点击这里查看原图(大图)。

  在这儿,{R:1}代表了MatchUrl中的第一个匹配括号

  同样配置的web.config文件如下:
复制代码 代码如下:

测试访问http://phpweb.leven.com.cn/test.php,结果如下:

  下面同样可以配置levenblog.leven.com.cn和realblog.leven.com.cn

  Ui界面配置不再说明,配置完成的web.config如下:
复制代码 代码如下:

访问结果分别为:

  和

  我们再添加最后一项,将http://localhost/leven 代理到 http://leven.com.cn/
复制代码 代码如下:

但是此时访问会出现问题,如下图:

  显然,出现了css丢失等情况,通过查看源码:

  可以看到css的路径有误,不仅如此,所有的img,a标签路径全部出现了错误,代理之后的地址是/leven/xxx的,但是源地址仍然是/xxx,因此我们还需要增加一个Outbound Rule

  配置好的config文件如下:
复制代码 代码如下:

然后刷新:

  可见路径正确.

  在使用了反向代理之后,编程上也有些地方需要注意了,在取客户端IP的时候,由于多了一层代理,直接是无法获取的,因此,我们需要开启

  然后通过获取Header中的X-Forworded-For字段来取得客户端IP

  从测试来看,ARR是个非常有用的代理模块,能完全满足我们反向代理的需求,不仅如此,ARR还提供了UrlRewrite,ServerFarms,Cache等很多功能,很是值得我们挖掘.

来源: 博客园 作者:Leven

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com