Reverse Proxy Guide翻译—Apache官网V2.4

概述

一款合格的WEB服务器,应该能够为终端用户同时提供静态和动态内容,为此Apache httpd(大多数WEB服务器也一样)可以充当反向代理服务器使用。也常常被称作“网关”服务器。 
在这种场景下,httpd不产生也不存储数据,而是从一个或多个后端服务器(backend servers)获取内容。后端服务器通常和外部网络没有直接的网络连接。httpd收到客户端请求后,将其提供给某一后端服务器,后端服务器处理请求,并将生成的内容返回给httpd。最后,httpd生成最终的HTTP响应返回给客户端。 
这样设计有很多原因,但大部分是考虑到安全、高可用、负载均衡以及集中认证/授权。实际操作中,后端(实际处理请求的并生成内容的服务器)基础结构的布局、设计以及架构,实现与外界隔离并且被保护是至关重要的。但就客户端而言,反向代理服务器使所有内容的唯一来源。 
典型的实现如图所示: 
reverse-proxy-arch

反向代理依赖

依赖模块 相关命令
mod_proxy ProxyPass
mod_proxy_balancer BalancerMember
mod_proxy_hcheck  

样例

ProxyPass 命令将输入请求映射到后端服务器或是(a cluster of servers known as a Balancer group)。最简单的例子——代理所有请求至后端服务器:

 
 
  1. ProxyPass "/" "http://www.example.com/"

通常还会加上ProxyPassReverse命令,确保后端服务器生成的响应头指向反向代理服务器而不是后端服务器(重定向?):

 
 
  1. ProxyPass "/" "http://www.example.com/"
  2. ProxyPassReverse "/" "http://www.example.com/"

下面这个例子只有特定的URI才会被代理

 
 
  1. ProxyPass "/images" "http://www.example.com/"
  2. ProxyPassReverse "/images" "http://www.example.com/"

集群和负载均衡

上述方法十分有用,但仍存在一定缺陷——当仅有的一台后端服务器负载很高甚至不可用时,代理将发挥不了其优势。为此,我们需要定义一组可以处理相同请求的后端服务器,反向代理服务器为它们提供负载均衡和故障转移。这组后端服务器常被称作集群,在Apache中我们称其为均衡器(balancer)。下面使用标签和BalanceMember命令定义了一个均衡器:

 
 
  1. <Proxy balancer://myset>
  2. BalancerMember http://www2.example.com:8080
  3. BalancerMember http://www3.example.com:8080
  4. ProxySet lbmethod=bytraffic
  5. </Proxy>
  6. ProxyPass "/images/" "balancer://myset/"
  7. ProxyPassReverse "/images/" "balancer://myset/"

其中使用balancer://创建了一个名为myset的均衡器(集群)。均衡器包括两个后端服务器,在httpd中我们称其为均衡器成员(BalancerMembers)。所有对/image的请求会被代理到两个后端服务器中的一个。ProxySet命令指定了myset*均衡器所使用的负载均衡算法——基于I/O字节。

提示 
均衡器成员有时候也称作工作组(BalancerMembers are also sometimes referred to as workers.)。

均衡器和均衡器成员配置

ProxyPass定义了各种参数用以配置均衡器和工作组。例如,我们可以设定http://www3.example.com:8080来处理3x的流量,超时(timeout)为1秒,具体配置如下:

 
 
  1. <Proxy balancer://myset>
  2. BalancerMember http://www2.example.com:8080
  3. BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
  4. ProxySet lbmethod=bytraffic
  5. </Proxy>
  6. ProxyPass "/images" "balancer://myset/"
  7. ProxyPassReverse "/images" "balancer://myset/"

故障转移

Apache提供对各种故障转移场景下的参数微调,详细指定哪些工作组甚至均衡器在这种场景下可以被访问。下面样例配置了2种故障转移场景:首先,http://hstandby.example.com:8080只在myset均衡器中其它工作组失效的情况下才会启用。如果该服务器也失效了,就会启用http://bkup1.example.com:8080 和 http://bkup2.example.com:8080工作组。

 
 
  1. <Proxy balancer://myset>
  2. BalancerMember http://www2.example.com:8080
  3. BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
  4. BalancerMember http://hstandby.example.com:8080 status=+H
  5. BalancerMember http://bkup1.example.com:8080 lbset=1
  6. BalancerMember http://bkup2.example.com:8080 lbset=1
  7. ProxySet lbmethod=byrequests
  8. </Proxy>
  9. ProxyPass "/images/" "balancer://myset/"
  10. ProxyPassReverse "/images/" "balancer://myset/"

这段配置的神奇之处是为http://hstandby.example.com:8080 设置了+H status标志,表明其为热备模式。两个bkup#服务器设置为#1负载均衡组(默认为0组)。故障转移时,热备机(存在的话)将会首先被启用,当所有常用工作组(指的是lbset为0的组)失效时,负载均衡将会首先启用编号最小的工作组。

均衡器管理

Apache httpd反向代理一个最有用、最独特的功能就是内置了balancer-manager管理程序。和mod_status类似,balancer-manager可以展示当前已生效的配置、均衡器和工作组的状态等信息。除此之外,balancer-manager还支持动态、运行时重新配置(dynamic, runtime, on-the-fly reconfiguration)大多数负载均衡参数,例如,添加均衡器成员(工作组)到现有的均衡器。启用该功能需要添加以下配置:

 
 
  1. <Location "/balancer-manager">
  2. SetHandler balancer-manager
  3. Require host localhost
  4. </Location>

提醒 
在确保服务器安全的情况下再启用balancer-manager。特别是,要确保对该URL的访问受到严格限制。

当以 /balancer-manager URL(例如,http://rproxy.example.com/balancer-manager/)访问反向代理服务器时,将会看到以下页面:

balancer-manager page
该页面提供各种参数调整,关闭工作组、修改负载均衡方式、添加新工作组等等。点击均衡器,将会看到以下页面:

balancer-manager page
点击工作组:

balancer-manager page
确保 BalancerPersist 已启用,使得反向代理服务器重启时,修改的配置可以保留。

动态健康检查

httpd将请求代理给工作组之前,可以通过ping来测试工作组是否可用。ping参数通过ProxyPass来设置。通常情况下,使用动态方式来检测工作组的健康状况更为有效。 mod_proxy_hcheck 模块为httpd提供该功能。

均衡器成员状态标志

在balancer-manager中,工作组可以设置特定的状态、查看当前运行状态,状态含义如下:

flag String 描述
  OK 工作组可用
  inti 工作组已被初始化
D Dis 工作组不可用,拒绝所有请求,将会自动重试
S Stop 工作组被关闭,拒绝所有请求,不会自动重试
I Ign 工作组处于 ignore-errors 模式,总是被视为可用
H Stby 工作组处于 hot-standby 模式,只在无可用工作组的情况下启用
E Err 工作组处于 error 状态,通常由于请求前检查,请求不会被代理到该工作组,
视该工作组 retry 配置执行重试操作
N Drn 工作组处于 drain 模式,只接受发往其自身的现有粘性回话(sticky sessions) ,
忽略其他所有请求。(will only accept existing sticky sessions destined for 
itself and ignore all other requests.)
C HcFI 工作组未通过动态健康检查,将在通过后续健康检查后启用

原文网址:http://httpd.apache.org/docs/2.4/howto/reverse_proxy.html


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值