httpd----> httpd作反向代理服务器(翻译)

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

翻译

反向代理指南

除了作为“基本”Web服务器,并为最终用户提供静态和动态内容之外,Apache httpd(以及大多数其他Web服务器)还可充当反向代理服务器,也称为“网关“服务器。

在这种情况下,httpd本身不会生成或托管数据,而是通过一个或多个后端服务器获取内容,这些服务器通常不会直接连接到外部网络。当httpd接收到来自客户端的请求时,请求本身会被代理到其中一个后端服务器,然后处理请求,生成内容,然后将这些内容发送回httpd,然后httpd生成实际的HTTP响应返回给客户端。

这种实现有很多原因,但通常的典型原因是安全性,高可用性,负载平衡和集中认证/授权。在这些实现中,至关重要的是后端基础设施(实际上处理请求的那些服务器)的布局,设计和体系结构是绝缘的并且不受外部保护;就客户而言,反向代理服务器是所有内容的唯一来源。

典型的实现如下:

 反向代理

相关模块 相关指令
mod_proxy proxypass
mod_proxy_balancer balancerMember
mod_hcheck  

简单反向代理

ProxyPass指令指定传入请求到后端服务器(或称为Blancer组的服务器集群)的映射。 最简单的示例将所有请求(“/”)代理到单个后端:

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

 要确保从后端生成的Location:Header被修改为指向反向代理,而不是回到自身,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/"

在上面,任何以/ images路径开头的请求被代理到指定的后端,否则它将在本地处理。

集群和负载均衡器(Balancer)

尽管如此有用,但它仍然存在缺陷,即(单个)后端节点停机或负载过重,代理这些请求并没有提供真正的优势。 我们需要的是能够定义一组或一组后端服务器,这些后端服务器可以处理这些请求,并且可以让反向代理负载均衡和故障转移。 这个组有时被称为集群,但Apache httpd的术语是一个负载均衡器(Balancer)。 通过利用<Proxy>和BalancerMember指令来定义一个负载均衡器(Balancer),如下所示:

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 
7 ProxyPass "/images/"  "balancer://myset/"
8 ProxyPassReverse "/images/"  "balancer://myset/"

balancer:// 的写法告诉httpd我们正在创建一个名为myset的balancer集。 它包括2个后端服务器,httpd调用BalancerMembers。 在这种情况下,任何/ images的请求都将被代理到2个后端之一。 ProxySet指令指定myset Balancer使用基于I / O字节平衡的负载均衡算法。

1 提示
2 
3 BalancerMember有时也被称为worker。

Balancer 和 BalancerMember 的配置

您可以通过ProxyPass中定义的各种参数调整Balancer 和 BalancerMember 的大量配置细节。 例如,假设我们希望http://www3.example.com:8080以1秒的超时处理3x流量,我们将按如下方式调整配置:

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 
7 ProxyPass "/images"  "balancer://myset/"
8 ProxyPassReverse "/images"  "balancer://myset/"

故障转移

您还可以微调各种故障切换方案,详细说明在这种情况下应该访问哪些worker以及哪些balancer。 例如,下面的设置实现了三个故障转移情况:

1当http://www2.example.com:8080和 http://www3.example.com:8080中有一个或者两个都挂了,那么http://spare1.example.com:8080和 http://spare2.example.com:8080 被用来发送流量。一个待机的服务器将被用来替代相同balancer集中的一个不可用的服务器。

2当balancer集中全部不可用时,http://hstandby.example.com:8080被用来唯一发送流量。

3如果所有的负载均衡器被设置成0,他们都不可用,那么只有http://bkup1.example.com:8080 和 http://bkup2.example.com:8080 中的worker被设置成1从而进入工作状态。 

因此,每个负载均衡器组可以有一个或多个热备用

 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://spare1.example.com:8080 status=+R
 5     BalancerMember http://spare2.example.com:8080 status=+R
 6     BalancerMember http://hstandby.example.com:8080 status=+H
 7     BalancerMember http://bkup1.example.com:8080 lbset=1
 8     BalancerMember http://bkup2.example.com:8080 lbset=1
 9     ProxySet lbmethod=byrequests
10 </Proxy>
11 
12 ProxyPass "/images/"  "balancer://myset/"
13 ProxyPassReverse "/images/"  "balancer://myset/"

对于故障转移,热备件可用作同一负载均衡器组中不可用worker的替代。 如果worker正在耗尽,停止或处于错误/失败状态,则认为worker不可用。 如果负载平衡器组中的所有worker和备件都不可用,则使用热备用。 负载均衡器集合(以及它们各自的热备用和备用)始终按照从最低到最高的顺序进行尝试。

balancer管理器

Apache httpd的反向代理最独特和有用的特性之一是嵌入式balancer-manager应用程序。 与mod_status类似,balancer-manager显示当前正在使用的已启用的balancer和worker的当前工作配置和状态。 但是,它不仅显示这些参数,还允许动态的,运行时的几乎所有的重新配置,包括将新的BalancerMembers(worker)添加到现有的balancer。 要启用这些功能,需要将以下内容添加到您的配置中:

1 <Location "/balancer-manager">
2     SetHandler balancer-manager
3     Require host localhost
4 </Location>
 警告
 在保证服务器安全之前,请不要启用balancer-manager。 尤其要确保对URL的访问受到严格限制。

当在该URL处访问反向代理服务器时(例如:http://rproxy.example.com/balancer-manager/,您将看到类似于以下的页面:

这种形式允许devops admin调整各种参数,让worker脱机,改变负载平衡方法并添加新works。 例如,点击balancer本身,您将看到以下页面:

而点击worker,显示此页面:

要使这些更改持续重新启动反向代理,请确保已启用BalancerPersist。

健康动态检查

在httpd将请求代理给worker之前,它可以通过使用ProxyPass为该worker设置ping参数来“测试”该worker是否可用。 通常情况下,以动态方式检查worker的健康状况会更有用。 这是通过mod_proxy_hcheck模块在Apache httpd中实现的。

BalancerMember状态标志

在balancer-manager中,显示worker人的当前状态或状态,并且可以set/reset。 这些状态的含义如下:

标志             字符串                  描述       
  Ok  worker可用
  Init  worker已被初始化
D Dis  worker被禁用,不会接受任何请求; 将自动重试。
S Stop  worker在管理层面上被停止; 不会接受请求,不会自动重试
I Ign  worker处于忽略错误模式,并始终被视为可用。
R Spar  worker是一个热备用。 对于给定的lbset中不可用的每个worker(排空,停止,出错等),使用相同lbset的可用热备件将用于其位置。 热备件可以帮助确保特定数量的worker始终可供balancer使用。
H Stby  worker处于热备用模式,只有在balancer组中没有其他可行的worker或备件时才能使用。
E Err  worker处于错误状态,通常是由于预先请求检查失败; 请求将不会代理给该worker,但会根据worker的重试设置重试。
N Drn  worker处于流失模式,并且只会接受发往自己的现有粘性会话并忽略所有其他请求。
C HcFl worker未通过动态健康检查,在通过后续健康检查之前不会使用。

猜你喜欢

转载自www.cnblogs.com/mrray1105/p/9195777.html