识别代理服务器背后的真实 IP 地址
使用标准 PHP 方法(例如 $_SERVER['REMOTE_ADDR'] 检索访问者的 IP 地址)如果访问者通过代理服务器访问您的网站,则可能无法提供准确的信息。
要解决此问题,请考虑使用以下 PHP 代码:
<code class="php">function getUserIP() { // Obtain the IP address of the visitor behind CloudFlare if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; $ip = null; if(filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); echo $user_ip; // Output IP address [Ex: 177.87.193.134]</code>
此函数首先检查是否访客正在使用 CloudFlare,这是一种流行的代理服务。如果是,它会使用 HTTP_CF_CONNECTING_IP 标头检索真实 IP 地址。
接下来,它会考虑三个潜在的 IP 源:HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR。它会验证每个 IP 地址并选择最可靠的一个。
通过采用这种方法,您可以有效地获取访问者的实际 IP 地址,即使他们位于代理服务器后面。
以上是如何识别代理服务器背后的真实IP地址?的详细内容。更多信息请关注PHP中文网其他相关文章!