标签:uri 托管 特定 管理层 体系 会话 测试 启用 相同
原文 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未通过动态健康检查,在通过后续健康检查之前不会使用。 |
完
标签:uri 托管 特定 管理层 体系 会话 测试 启用 相同
原文地址:https://www.cnblogs.com/mrray1105/p/9195777.html