请选择 进入手机版 | 继续访问电脑版
在线投稿 文字标题 文字标题 文字标题 文字标题 文字标题
切换皮肤
除了作为“基本”Web服务器,并为最终用户提供静态和动态内容之外,Apache httpd(以及大多数其他Web服务器)也可以充当反向代理服务器,也称为“网关” “服务器。
在这种情况下,httpd本身不生成或托管数据,而是由一个或多个后端服务器获取内容,后端服务器通常没有直接连接到外部网络。当httpd收到来自客户端的请求时,请求本身被代理到这些后端服务器其中一个,这个后端服务器然后处理请求,生成内容然后将此内容发送回httpd,httpd然后生成实际的HTTP响应回客户端。
这种实现有很多原因,但通常典型的原因是安全性,高可用性,负载平衡和集中式身份验证/授权。在这些实现中,后端基础设施(实际处理请求的那些服务器)的布局,设计和架构是绝缘的并且受到外部保护是至关重要的;就客户而言,反向代理服务器是所有内容的唯一来源。
典型的实现如下:
213404_78093.png
1. 简单的反向代理ProxyPass指令指定传入请求到后端服务器(或称为Balancer组的服务器群集)的映射。最简单的示例将所有请求(/)代理到单个后端服务器:
ProxyPass "/"  "http://www.example.com/"Shell

要确保从后端生成的Location:标头被修改为指向反向代理,而不是返回自身,最常需要ProxyPassReverse指令:
ProxyPass "/"  "http://www.example.com/"ProxyPassReverse "/"  "http://www.example.com/"Shell

只能代理特定的URI,如下例所示:
ProxyPass "/images"  "http://www.example.com/"ProxyPassReverse "/images"  "http://www.example.com/"Shell

在上面,任何以/images路径开头的请求都被代理到指定的后端,否则它将在本地处理。
2. 集群和平衡器如上所述,尽管它仍然存在缺陷,即(单个)后端节点应该关闭或变得负载很重,代理这些请求不会提供真正的优势。所需要的是能够定义一组或一组后端服务器,它们可以处理这些请求,并且反向代理可以在它们之间进行负载平衡和故障转移。这个组有时被称为集群,但Apache httpd的术语是平衡器。通过利用<Proxy>和BalancerMember指令定义平衡器,如下所示:
<Proxy balancer://myset>    BalancerMember http://www2.example.com:8080    BalancerMember http://www3.example.com:8080    ProxySet lbmethod=bytraffic</Proxy>ProxyPass "/images/"  "balancer://myset/"ProxyPassReverse "/images/"  "balancer://myset/"Shell

balancer:// scheme告诉httpd我们正在创建一个名为myset的平衡器集。它包括2个后端服务器,httpd称之为BalancerMembers。在这种情况下,对/images的任何请求都将代理到2个后端其中一个。ProxySet指令指定myset Balancer使用负载平衡算法,该算法根据I/O字节进行平衡。
3. Balancer和BalancerMember配置可以通过ProxyPass中定义的各种参数调整平衡器和工作人员的大量配置详细信息。例如,假设希望http://www3.example.com:8080处理3x超时为1秒的流量,可按如下方式调整配置:
<Proxy balancer://myset>    BalancerMember http://www2.example.com:8080    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1    ProxySet lbmethod=bytraffic</Proxy>ProxyPass "/images"  "balancer://myset/"ProxyPassReverse "/images"  "balancer://myset/"Shell

3. 故障转移还可以微调各种故障转移方案,详细说明在这种情况下应该访问哪些 worker 甚至哪些平衡器。例如,以下设置实现了三种故障转移情况:
因此,可以为每个负载平衡器组设置一个或多个热备件和热备件。
<Proxy balancer://myset>    BalancerMember http://www2.example.com:8080    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1    BalancerMember http://spare1.example.com:8080 status=+R    BalancerMember http://spare2.example.com:8080 status=+R    BalancerMember http://hstandby.example.com:8080 status=+H    BalancerMember http://bkup1.example.com:8080 lbset=1    BalancerMember http://bkup2.example.com:8080 lbset=1    ProxySet lbmethod=byrequests</Proxy>ProxyPass "/images/"  "balancer://myset/"ProxyPassReverse "/images/"  "balancer://myset/"Shell

对于故障转移,热备件用作同一负载均衡器组中不可用工作的替代品。如果worker正在耗尽,停止或处于错误/失败状态,则该worker被视为无法使用。如果负载均衡器集中的所有worker和备件都不可用,则使用热备用。负载均衡器组(及其各自的热备件和备用组件)始终按从低到高的顺序进行尝试。
4. 均衡器管理器Apache httpd的反向代理最独特和最有用的功能之一是嵌入式均衡器管理器应用程序。与mod_status类似,balancer-manager显示当前正在使用的已启用均衡器和工作器的当前工作配置和状态。但是,它不仅显示这些参数,还允许动态,运行时,几乎所有这些参数的动态重新配置,包括向现有均衡器添加新的BalancerMembers(worker)。要启用这些功能,需要在配置中添加以下内容:
<Location "/balancer-manager">    SetHandler balancer-manager    Require host localhost</Location>Shell

当在该URL访问反向代理服务器时(例如:http://rproxy.example.com/balancer-manager/,将看到类似于以下内容的页面:
214859_47788.png
此表单允许devops管理员调整各种参数,使worker脱机,更改负载均衡方法并添加新工作。例如,单击均衡器本身,将看到以下页面:
215006_89337.png
点击worker,显示此页面:
215054_79192.png
//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/apache_http/apache-reverse_proxy.html



回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    Archiver|手机版|小黑屋|齐聚无忧 |网站地图

    Powered by Discuz! X3.4  © 2001-2013 Comsenz Inc.