• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 反向代理设置

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

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

    这种实现有很多原因,但是通常典型的理由是由于安全性,高可用性,负载平衡和集中式身份验证/授权。在这些实现中,至关重要的是后端基础结构(那些实际处理请求的服务器)的布局,设计和体系结构必须与外界隔离并受到保护。就客户端而言,反向代理服务器是所有内容的唯一来源。

    一个典型的实现如下:
    反向代理服务器Proxy

    反向代理

    相关模块相关指令
    • mod_proxy
    • mod_proxy_balancer
    • 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/"
    

    在上面,所有以该/images路径开头的请求都将代理到指定的后端,否则将在本地处理。

    集群和平衡器

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

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

    暗示

    平衡器成员有时也称为工作者

    平衡器和BalancerMember配置

    您可以通过中定义的各种参数来调整平衡器工人的许多配置细节ProxyPass。例如,假设我们想http://www3.example.com:8080以1秒的超时时间处理3倍的流量,则可以如下调整配置:

    <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://spare1.example.com:8080http://spare2.example.com:8080只发送的流量,如果一个或两个http://www2.example.com:8080http://www3.example.com:8080不可用。(一个备件将用于替换同一平衡器组中一个不可用的成员。)
    2. http://hstandby.example.com:8080仅当平衡器集中的所有其他工作器0都不可用时,才发送流量。
    3. 如果所有负载均衡器组的0工作人员,备件和备用服务器均不可用,则只有这样才能使均衡器组中的http://bkup1.example.com:8080http://bkup2.example.com:8080工人1轮换。

    因此,可以为每个负载均衡器集设置一个或多个热备用和热备用。

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

    对于故障转移,将热备用用作同一负载均衡器集中不可用工人的替代品。如果工作人员正在排干,停止或处于错误/失败状态,则认为该工人不可用。如果负载均衡器集中的所有工作人员和备件都不可用,则使用热备用。始终按从最低到最高的顺序尝试负载均衡器集(及其各自的热备用和备用)。

    平衡经理

    嵌入式平衡器管理器应用程序是Apache httpd反向代理最独特和有用的功能之一。与相似mod_statusbalancer-manager显示当前正在使用的平衡器和工作人员的工作配置以及状态。但是,它不仅可以显示这些参数,还可以对几乎所有参数进行动态,运行时,即时的重新配置,包括将新的BalancerMembers(工人)添加到现有的Balancer中。要启用这些功能,需要在配置中添加以下内容:

    <Location "/balancer-manager">
        SetHandler balancer-manager
        Require host localhost
    </Location>
    

    警告

    在确保服务器安全之前,请勿启用平衡器管理器。特别是,请确保严格限制对URL的访问。

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

    该表格允许devops管理员调整各种参数,使工作人员脱机,更改负载平衡方法并添加新作品。例如,单击平衡器本身,您将获得以下页面:

    而单击工作人员,则显示此页面:
    反向代理服务器

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

    动态健康检查

    在httpd向工作者发出请求之前,它可以通过使用为该工作者设置参数来“测试”该工作者是否可用。通常,以动态方式带外检查工人的健康状况会更有用。这是通过Apache httpd 模块实现的。pingProxyPassmod_proxy_hcheck

    BalancerMember状态标志

    平衡器管理器中,将显示工人的当前状态或状态,并可对其进行设置/重置。这些状态的含义如下:

    FlagStringDescription
    OkWorker is available
    InitWorker has been initialized
    DDisWorker is disabled and will not accept any requests; will be automatically retried.
    SStopWorker is administratively stopped; will not accept requests and will not be automatically retried
    IIgnWorker is in ignore-errors mode and will always be considered available.
    RSparWorker is a hot spare. For each worker in a given lbset that is unusable(draining, stopped, in error, etc.), a usable hot spare with the same lbset will be used in its place. Hot spares can help ensure that a specific number of workers are always available for use by a balancer.
    HStbyWorker is in hot-standby mode and will only be used if no other viable workers or spares are available in the balancer set.
    EErrWorker is in an error state, usually due to failing pre-request check; requests will not be proxied to this worker, but it will be retried depending on the retry setting of the worker.
    NDrnWorker is in drain mode and will only accept existing sticky sessions destined for itself and ignore all other requests.
    CHcFlWorker has failed dynamic health check and will not be used until it passes subsequent health checks.