我一般认为在PHP脚本中我可以测试$_SERVER['REMOTE_ADDR'] 以建立发出请求的IP地址.但是,我开始怀疑事情是否有点复杂.这是场景
该请求以
file_get_contents('https://url?data=value')
Run Code Online (Sandbox Code Playgroud)
在服务器A,B和C,我很天真地测试$_SERVER['REMOTE_ADDR'],以确定该请求实际上由服务器来小号.令我惊讶的是,结果变得曲解和变化
REMOTE_ADDR是与注册服务器S交互的人类用户的IP地址REMOTE_ADDR是注册服务器的IP地址,S - 我一直希望看到的REMOTE_ADDR是来自我托管服务器S的虚拟服务器上的IP地址池中的另一个IP地址我真的不需要执行这个额外的验证测试,所以我可以完全放弃它.尽管如此,这个结果让我感到意外,所以我很想知道这里是否有人可以了解正在发生的事情.
我应该提一下,我在服务器A,B和C上的Lighttpd上运行PHP 5.5,在服务器S上的Apache 2上运行PHP 5.3 .
REMOTE_ADDR 不是获取 IP 地址的唯一方法,还有:
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
Run Code Online (Sandbox Code Playgroud)
它们的设置方式不同,含义也不同,最终很难获得您想要的 IP 地址。
编辑:其中唯一可靠且用户无法修改的是 REMOTE_ADDR,但它并不总是完全按照您的要求行事,因此您必须使用其他的,无论多么“不安全” ’每个人都说他们是。