我在自动调节池上有一个AWS TCP负载平衡器,后面有多个域,所以我不能在负载平衡器上进行SSL终止,因此TCP也是如此。
我已经更新了我的日志logging格式来loggingX-Forwarded-For,这对于HTTP而言并不适用于HTTPS。
论坛并没有表明,这是不可能的,因为它谈论HTTP(S),但我不能得到它的工作。 它可以工作吗?
这是我的日志logging细节:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog "logs/access_log" combined env=!forwarded CustomLog "logs/access_log" proxy env=forwarded
在PHP中转储所有属性我可以看到HTTP请求头,但不是HTTPS,所以我不认为这是一个configuration问题。
ELB没有办法添加这个头文件,因为这个头文件是HTTP的一个函数,并且这是一个TCP负载平衡器。 所有它知道的是,它正在传递一些TCPstream而不再。 如果您需要ELB添加此标头,则需要在负载平衡器处终止HTTPS。 从那里它可以根据需要通过HTTP或HTTPS与您的后端实例进行通信。
虽然我非常怀疑在负载均衡器上没有完成SSL终止的情况下可以获得X-Forwarded-For工作,但是我还没有find一个明确的no。 不过,我有一个使用CloudFront的解决scheme。
由于可以有多个分发指向一个负载平衡器,并且AWS为SSL提供证书,因此可以在边缘位置终止SSL。 CloudFront将添加标题并将请求(如果需要)转发到负载均衡器。 从那里,标题将到达您的服务器。