负载平衡器 $_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
我已经切换到使用 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