Apache正向代理与反向

  • 基础概念

  1.  应用场景

代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和Local Area Network(局域网)。     

一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源(如:文件)。在后一种情况中,代理服务器可能对目标服务器的资源下载至本地缓存,如果客户端所要获取的资源在代理服务器的缓存之中,则代理服务器并不会向目标服务器发送请求,而是直接返回缓存了的资源。一些代理协议允许代理服务器改变客户端的原始请求、目标服务器的原始响应,以满足代理协议的需要。代理服务器的选项和设置在计算机程序中,通常包括一个“防火墙”,允许用户输入代理地址,它会遮盖他们的网络活动,可以允许绕过互联网过滤实现网络访问。


正向代理:

            正向代理主要是将内网的访问请求通过代理服务器转发访问并返回结果。通常客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web,需要在客户端的浏览器中设置代理服务器。一般由两个使用场景;

  1. 局域网的代理服务器
  2. 访问某个受限网络的代理服务器,如访问某些国外网站

        局域网的多台客户端  ---->    代理服务器   ----->   web服务器(目标服务器)

     此时外部网络的主机上并不会配置并使用这个代理服务器,因此正向代理的web代理服务器不支持外部对内部网络的访问请求。


反向代理:

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量。此时客户端能访问外部的web,但是不能访问某些局域网中的web站点,我们需要目标网络中的一台主机做反向代理服务器来充当我们的访问目标,将局域网内部的web等站点资源缓存到代理服务器上,,客户端直接访问代理就像访问目标web一样(此代理对客户端透明,即客户端不用做如何设置,并不知道实际访问的只是代理而已,以为就是访问的目标)一般使用场景是:

  1. idc的某台目标机器只对内开放web,外部的客户端要访问,就让另一台机器做proxy,外部直接访问proxy即相当于访问目标;
  2. idc的目标机器的某个特殊的web服务工作在非正常端口如8080,而防火墙上只对外开放了80,此时可在80上做proxy映射到8080,外部访问80即相当于8080。方向代理的原理图如下:

                              

此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

 

  • apache中的ProxyPass与ProxyPassServer

 apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能。应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能。

ProxyPass

语法:ProxyPass [path]  !|url

它主要是用作URL前缀匹配,不能有正则表达式,它里面配置的Path实际上是一个虚拟的路径,在反向代理到后端的url后,path是不会带过去的,示例

1) ProxyPass /image/ !       /images/的请求不被转发

2)ProxyPass /mirror/foo/   http://backend.example.com/     我们假设当前的服务地址是http://example.com/,如果我们做下面这样的请求:http://example.com/mirror/foo/bar那将被转成内部请求:http://backend.example.com/bar

 注意:配置的时候,不需要被转发的请求,要配置在需要被转发的请求前面。

ProxyPassMatch

语法: ProxyPassMatch [regex] !|url

这个实际上是url正则匹配,而不是简单的前缀匹配,匹配上的regex部分是会带到后端的url的,这个是与ProxyPass不同的。  示例:

1) ProxyPassMatch ^/images !  表示对/images的请求,都不会被转发

2) ProxyPassMatch  ^(/.*.gif)   http://www.linuxidc.com     示对所有gif图片的请求,都被会转到后端,如请求是 http://example.com/foo/bar.gif ,那内部请求会被转换为 http://www.linuxidc.com/admin/bar.gif

ProxyPassReverse

语法:ProxyPassReverse [path]   url

它一般和ProxyPass指令配合使用,此指令使Apache调整HTTP重定向应答中Location, Content-Location, URI头里的URL,这样可以避免在Apache作为反向代理使用时。后端服务器的HTTP重定向造成的绕过反向代理的问题:

           ProxyPass /hadoop http://www.linuxidc.com/

            ProxyPassReverse /hadoop http://www.linuxidc.com/

原理说明:

ProxyPass 很好理解,就是把所有来自客户端对http://www.linuxidc.com的请求转发给http://172.18.234.54上进行处理。ProxyPassReverse 的配置总是和ProxyPass 一致,但用途很让人费解。似乎去掉它很能很好的工作,事实真的是这样么,其实不然,如果响应中有重定向,ProxyPassReverse就派上用场。

        ProxyPassReverse 工作原理:假设用户访问http://www.linuxidc.com/index.html.txt,通过转发交给http://172.18.234.54 /index.html.txt处理,假定index.html.txt处理的结果是实现redirect到inde2.txt(使用相对路径,即省略了域名信息),如果没有配置反向代理,客户端收到的请求响应是重定向操作,并且重定向目的url为http://172.18.234.54/inde2.txt ,而这个地址只是代理服务器能访问到的,可想而知,客户端肯定是打不开的,反之如果配置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为 http://www.linuxidc.com/inde2.txt,即是在原请求之后追加上了redirect的路径。当客户端再次请求http: //www.linuxidc.com/inde2.txt,代理服务器再次工作把其转发到http://172.18.234.54/inde2.txt。客户端到服务器称之为正向代理,那服务器到客户端就叫反向代理。

 

参考: https://www.linuxidc.com/Linux/2017-10/147378.htm

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值