Apache2.4 HTTP服务器配置反向代理和负载均衡

反向代理指南

除了作为“基本” Web服务器并为最终用户提供静态和动态内容外,Apache httpd(以及大多数其他Web服务器)还可以充当反向代理服务器,也称为“网关”服务器。
在这种情况下,httpd本身不会生成或托管数据,而是通过一台或几台后端服务器获取内容,这些服务器通常没有与外部网络的直接连接。当httpd收到来自客户端的请求时,该请求本身将被代理 到这些后端服务器之一,然后由该后端服务器处理该请求,生成内容,然后将该内容发送回httpd,然后再将实际的HTTP响应生成回客户端。
这种实现有很多原因,但是通常典型的理由是由于安全性,高可用性,负载平衡和集中式身份验证/授权。在这些实现中,至关重要的是后端基础结构(那些实际处理请求的服务器)的布局,设计和体系结构必须与外界隔离并受到保护。就客户端而言,反向代理服务器是所有内容的唯一来源。

典型的实现如下:
在这里插入图片描述

反向代理

相关模块 相关指令
mod_proxy
mod_proxy_hcheck
ProxyPass
BalancerMember

简单的反向代理

#该ProxyPass 指令指定传入请求到后端服务器(或称为组的服务器集群)的映射Balancer 。最简单的示例将所有请求("/")代理到一个后端:
ProxyPass "/"  "http://www.example.com/"

#为了确保Location:将从后端生成的和标头修改为指向反向代理,而不是返回自身,ProxyPassReverse 通常最需要使用该指令:
ProxyPass “/”  “http://www.example.com/” 
ProxyPassReverse “/”  “http://www.example.com/”   
   
#代理特定的URI,如以下示例所示:
ProxyPass “/images”  “ http://www.example.com/” 
ProxyPassReverse “/images”  “http://www.example.com/”   

完整配置案例:

<VirtualHost *:80>
       ServerAdmin 16315236@qq.com
       ServerName www.example.com
       DocumentRoot /var/www/html
       <Proxy *>
           Order deny,allow
           Allow from all
       </Proxy>
       #负载均衡配置
       <Proxy balancer://mycluster> 
	   BalancerMember http://127.0.0.1:8001/ 
	   BalancerMember http://127.0.0.1:8011/ 
       </Proxy>
       #将请求交给配置的负载均衡器处理
       ProxyPass /api balancer://mycluster/ 
       ProxyPassReverse /api balancer://mycluster/
       #将 /psd 请求分配给指定服务器
       ProxyPass /psd http://127.0.0.1:8002/
       ProxyPassReverse /psd http://127.0.0.1:8002/
</VirtualHost>

集群与负载均衡器 (Clusters and Balancers)

如上所述,它仍然有用,但仍然存在缺陷,即(单个)后端节点出现故障或负载沉重时,代理这些请求不会提供任何真正的优势。所需要的是定义一组后端服务器的能力,这些后端服务器可以处理此类请求,并使反向代理在其中进行负载平衡和故障转移。该组有时称为集群,但是Apache httpd的术语是balancer。一个通过利用<Proxy>and BalancerMember指令定义一个平衡器, 如下所示:

<Proxy balancer://myset>
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080
    #ProxySet指令指定 myset Balancer 使用基于I/O字节进行平衡的负载平衡算法
    ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"

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

平衡器和BalancerMember配置

   您可以通过中定义的各种参数 来调整平衡器 和节点的许多配置细节ProxyPass。例如,假设我们要http://www3.example.com:8080处理3倍的流量(超时时间为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/"

故障转移

您还可以微调各种故障转移方案,详细说明在这种情况下应访问哪些工作人员,甚至应访问哪些平衡器。例如,以下设置实现了三种故障转移情况:

1. 如果http://www2.example.com:8080或http://www3.example.com:8080不可用。http://spare1.example.com:8080和http://spare2.example.com:8080起作用,(一个备件将用于替换同一平衡器组中一个不可用的成员。)
2. http://hstandby.example.com:8080仅当平衡器集中的所有其他节点都不可用时,才起作用。
3. 如果所有负载均衡器组均无节点可正常工作,备件和备用服务器均不可用,则只有这样才能使均衡器组中http://bkup1.example.com:8080和 http://bkup2.example.com:8080节点轮换工作。
因此,可以为每个负载均衡器集设置一个或多个热备节点。

<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/"

Balancer Manager(负载均衡管理器)

        在确保服务器安全之前,请勿启用平衡器管理器。特别是,请确保严格限制对URL的访问
<Location "/balancer-manager">
    SetHandler balancer-manager
    Require host localhost
</Location>

平衡器成员状态标志(BalancerMember status flags)

        在平衡器管理器中,显示节点的状态与意义,并可对其进行设置/重置。这些状态的含义如下:
FlagDescription
D节点被禁用,将不接受任何请求;将自动重试。
S节点被停止;将不接受请求,也不会自动重试
I处于忽略错误模式,将始终被视为可用。
R热备用,确保平衡器始终可以使用特定数量的节点。
HWorker处于热备用模式,并且仅在平衡器集中没有其他可用的的worker或备件时才使用。
E处于错误状态,通常是由于请求前检查失败所致;请求不会被代理给该工作程序,但是将根据工作程序的retry设置重试该请求。
N处于耗尽模式,将仅接受以其自身为目的地的现有粘性会话,而忽略所有其他请求。
CWorker动态健康检查失败,直到通过后续的健康检查后才会使用。

详情请参考这里

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值