`

Apache 代理(Proxy)

阅读更多
代理分为:正向代理(Foward Proxy)和反向代理(Reverse Proxy)

1、正向代理(Foward Proxy)

正向代理(Foward Proxy)用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器,由代理服务器负责请求Internet,然后返回Internet的请求给内网的客户端。

Internal Network Client ——(request-url)——> Foward Proxy Server ———— > Internet

2、反向代理(Reverse Proxy)

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。如图:

/————> Internal Server1
Internet ————> Reverse Proxy Server  ————> Internal Server2
\————> internal serverN

Apache 代理

apache支持正向代理和反向代理,但一般反向代理使用较多。
Apache-配置文件代码
#正向代理

# 正向代理开关
ProxyRequests On
ProxyVia On

<Proxy *>
Order deny,allow
Deny from all
Allow from internal.example.com
</Proxy>

Apache-配置代码
# Reverse Proxy

# 设置反向代理
ProxyPass /foo http://foo.example.com/bar
# 设置反向代理使用代理服务的HOST重写内部原始服务器响应报文头中的Location和Content-Location
ProxyPassReverse /foo http://foo.example.com/bar

   注意:ProxyPassReverse 指令不是设置反向代理指令,只是设置反向代理重新重定向(3xx)Header头参数值。

举例:

下面是典型的APACHE+TOMCAT负载均衡和简单集群配置
    ProxyRequests Off  
    ProxyPreserveHost on 
    
    ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=Off
    ProxyPassReverse / balancer://cluster/  
    <Proxy balancer://cluster>  
      BalancerMember  http://localhost:8080 loadfactor=1 retry=10  
      BalancerMember  http://localhost:8081 loadfactor=1 retry=10  
      ProxySet lbmethod=bybusyness  
    </Proxy>

ProxyPassReverse / balancer://cluster/ 表示负载均衡配置中的所有TOMCAT服务器,如果响应报文的Header中有Location(3xx指定重定向的URL)或Content-Location(指定多个URL指向同一个实体),则使用请求报文中HOST替换URL中的HOST部分。


GET http://apache-host/entityRelativeUrl
tomcat response 307 ,Header Location: http://localhost:8080/entityRelativeUrl
apache 重写 response header中的Location为:http://apache-host:8080/entityRelativeUrl

注意:只有TOMCAT RESPINSE Location中的URL的Host部分匹配tomcat原始HOST的情况才重写。如307到http://localhost:8088/entityRelativeUrl是不会重写的。

描述:将远程服务器映射到本地服务器的URL空间
语法:ProxyPass [路径] !|url [键=值 键=值 ...]] [nocanon]
上下文:        server config, virtual host, directory
状态:扩展
模块:mod_proxy
该指令可以将远程服务器映射到本地服务器的URL空间;本地的服务器并不是扮演传统意义上的代理服务器的角色,而是表现为远程服务器的一个镜像。此本地服务器常被成为反向代理(reversed proxy)或者是网关(gateway)。路径是指本地虚拟路径的名字;url指远程服务器的一个部分URL,不能包含查询字符串。
注意:在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭的。
假设本地服务器的地址是 http://example.com/ ,那么
ProxyPass /mirror/foo/ http://backend.example.com/将会把对http://example.com/mirror/foo/bar的本地请求内部转换成到http://backend.example.com/bar的代理请求。
其中,!指令当你不想对某个子目录进行反向代理的时候就有用了,例如:
ProxyPass /mirror/foo/i !
ProxyPass /mirror/foo http://backend.example.com将会把所有的/mirror/foo请求重定向到backend.example.com除了对/mirror/foo/i的请求。
注意:
顺序很重要:排除的指令必须在一般的ProxyPass指令之前。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics