我们的应用程序有多个 ec2 服务器,通过 aws 负载均衡器提供服务。现在由于我们的特定要求,我们不得不使用 tcp 负载均衡器。
使用 tcp 负载均衡器,我们无法跟踪用户的 IP,但是在我应用某些设置后,负载均衡器会将用户的 IP 添加为代理标头,然后将数据包转发到 EC2。
在 EC2(我们使用 Apache 的地方)上,为了处理带有代理标头的数据包,我们需要启用 RemoteIPProxyProtocol。它适用于通过这些负载均衡器的流量。但是,我们有许多主机/域,它们直接配置到某些 EC2,即这些主机的流量不通过负载均衡器路由,并且连接数据包不包含代理标头,因此对于这些主机,Apache 停止工作,因为它需要所有带有代理标头的 HTTP 连接。
我需要的是,我们能否通过检测连接是否具有代理标头来有条件地启用 RemoteIPProxyProtocol?另请注意,我不能将主机名用作条件,因为我有数百个主机名,并且它们还会不断增加?
请帮忙。
注意:我已尝试将流量从负载均衡器转发到 EC2 的 81 和 444 端口,并且对于 apache 中的这些端口,我启用了 RemoteIPProxyProtocol,但是我需要将流量从 444 转发到 443 进行 SSL 解密,但这不起作用。
答案1
经过大量研究,我发现无法通过检测代理头来启用 RemoteIPProxyProtocol。
但是,我已经通过在与 apache 相同的服务器上使用 HAProxy 实现了这一点。我将流量从负载均衡器转发到 EC2 的端口 580 和 5443,而不是 80 和 443。同时我将 HAProxy 设置为在同一个 ec2 上监听 580 和 5443 端口。然后,HAProxy 将从数据包中解析代理协议标头,将其删除,并将实际客户端 ip(在代理协议标头中找到)转发到端口 80 和 443 上的 apache。
有用 !!