使用 Apache httpd 模拟 AWS NLB

使用 Apache httpd 模拟 AWS NLB

我正在使用 AWS 网络负载均衡器,并在其目标组中启用了“代理协议 V2”。连接通过以下配置转发到运行 nginx 的一些 docker 容器:

server {
        listen 8080 proxy_protocol;
        set_real_ip_from 0.0.0.0/0;
        real_ip_header proxy_protocol;
        #...
}

一切运行良好,但现在我想让这些 docker 容器在本地工作,以用于测试环境。因此,由于我本地没有 AWS NLB,我想我会使用 Apache http 模拟其行为。以下是我配置虚拟主机的方式,它必须支持 SSL。

<VirtualHost *:443>
    ServerAdmin [email protected]
    DocumentRoot "G:/path"
    ServerName host.example.com
    SSLEngine on
    SSLCertificateFile "${SRVROOT}/conf/certs/host.crt"
    SSLCertificateKeyFile "${SRVROOT}/conf/certs/host.key"
    ProxyPass / balancer://mycluster/
    <Proxy "balancer://mycluster">
        BalancerMember "http://localhost:8117"
    </Proxy>
</VirtualHost>

遗憾的是,这不起作用。我认为这是因为 Apache http 没有“向 BalanceMember 传达代理协议”。当我尝试发出请求时,我收到此错误。

<body>
    <h1>Proxy Error</h1>
    <p>The proxy server received an invalid
        response from an upstream server.<br />
The proxy server could not handle the request<p>Reason: <strong>Error reading from remote server</strong></p>
    </p>
</body>

错误日志报告这两行

[Mon Jun 08 13:19:43.324809 2020] [proxy_http:error] [pid 17460:tid 1164] (20014)Internal error (specific information not available): [client 127.0.0.1:51817] AH01102: error reading status line from remote server localhost:8117
[Mon Jun 08 13:19:43.324809 2020] [proxy:error] [pid 17460:tid 1164] [client 127.0.0.1:51817] AH00898: Error reading from remote server returned by /

是否可以使用 Apache httpd 模拟 NLB?我是否应该放弃并使用 HAProxy?谢谢

答案1

据我所知,Apache HTTPD 的代理协议支持通过第三方模块

您可以在这里查看所有相关信息: mod_proxy_protocol 文档 和这里: mod_proxy_protocol github 页面

解释很简单,先加载模块,通过指令启用代理协议:

ProxyProtocol on

相关内容