我按照指南进行操作http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html在我的两个 TCP 侦听器(端口 80 和 443)上启用代理协议。我在我的一个 EC2 实例上运行了以下命令:
aws elb create-load-balancer-policy \
--load-balancer-name 'proxy-connect-test' \
--policy-name EnableProxyProtocol \
--policy-type-name ProxyProtocolPolicyType \
--policy-attributes AttributeName=ProxyProtocol,AttributeValue=true
echo "Enabling policy on :80"
aws elb set-load-balancer-policies-for-backend-server \
--load-balancer 'proxy-connect-test' \
--instance-port 80 --policy-names 'EnableProxyProtocol'
echo "Enabling policy on :443"
aws elb set-load-balancer-policies-for-backend-server \
--load-balancer 'proxy-connect-test' --instance-port 443 \
--policy-names 'EnableProxyProtocol'
我可以使用 describe-load-balancers 来确认这些策略已被记录:
"BackendServerDescriptions": [
{
"InstancePort": 80,
"PolicyNames": [
"EnableProxyProtocol"
]
},
{
"InstancePort": 443,
"PolicyNames": [
"EnableProxyProtocol"
]
}
],
但是,当我向这两个端口发出请求时,使用 tcpdump 时看不到代理协议标头。我可以通过 HTTP 和 HTTPS 通过后端服务器成功发出请求,但似乎没有获得预期的 PROXY 标头。
我在客户端 (openssl s_client、Firefox) 和后端 Web 服务器 (tcpdump 正在观察连接的位置) 之间不使用任何其他类型的代理。侦听器为 TCP:80 -> TCP:8080 和 TCP:443 -> TCP:8443。
我还需要做其他事情才能在我的 ELB 上启用代理协议吗?
答案1
监听器是 TCP:80 -> TCP:8080 和 TCP:443 -> TCP:8443。
您已将策略应用于“实例端口”80 和 443。实例端口是指后端实例上的端口,因此在策略中实际上应该将其设置为 8080 和 8443。