负载平衡器 $_SERVER['REMOTE_ADDR'] 不工作

Load Balancer $_SERVER['REMOTE_ADDR'] Not working

我已经切换到使用 Amazon AWS 弹性负载均衡器,现在我获得了 $_SERVER['REMOTE_ADDR'] 的私有 IP 地址 - 它曾经为我提供客户端的 IP 地址。

现在如何获取客户端IP地址?

您的网络服务器接收来自 Amazon ELB 的 HTTP 请求。因此,远程地址将始终是 ELB ip 地址之一。 如果您需要 ELB 后面的远程主机地址,请从 HTTP header "X-Forwarded-For".

获取它

下面在 httpd.conf 定义了 LogFormat 的全局部分对我有用。通过以下更改,$_SERVER['REMOTE_ADDR'] 将设置为 php-fpm 上的客户端 ip 而不是 ELB ip。

<IfModule remoteip_module>
   RemoteIPHeader X-Forwarded-For
   LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
   LogFormat "%a %l %u %t \"%r\" %>s %b" common
</IfModule>

解决方案来自https://medium.com/@jiraknet/apache-2-4-mod-remoteip-for-get-real-ip-on-aws-elb-6e9f40876b06