通过VPN连接:PHP$\u服务器仍然为我提供本地IP
我已经在AWS上安装了一个PPTP VPN服务器,一切都很好。当连接到我的VPN时,例如www.getip.com显示VPN服务器的IP地址 到目前为止还不错 在同一台服务器上,我安装了一台Apache服务器,在该服务器上我运行一个PHP脚本来获取我自己的IP地址:通过VPN连接:PHP$\u服务器仍然为我提供本地IP,php,vpn,pptp,Php,Vpn,Pptp,我已经在AWS上安装了一个PPTP VPN服务器,一切都很好。当连接到我的VPN时,例如www.getip.com显示VPN服务器的IP地址 到目前为止还不错 在同一台服务器上,我安装了一台Apache服务器,在该服务器上我运行一个PHP脚本来获取我自己的IP地址: $ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; 无论我是否连接
$ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
无论我是否连接到VPN,此代码显示我的本地IP。我没有使用清漆或任何类似的缓存
你知道为什么会这样吗?
-$\u服务器变量是否保存在PHP会话中
非常感谢你的帮助
[更新]
这个问题肯定与VPN服务器和PHP脚本位于同一服务器上的事实有关。如果我把脚本放在另一台服务器上,一切都会按预期工作。如果连接到VPN,我希望看到服务器的公共IP(同时也是VPN服务器)。如果您使用的是VPC,则存在一个问题,即本地IP将用于VPC内的所有通信。VPC内部不存在公共IP(我假设为EIP),它被分配到网络接口,并且只在IGW进出时转换 这意味着,当您通过www.getip.com进行检查时,您将获得预期的EIP,因为您通过了IGW,但在本地网络中,您将只看到本地IP。此外,PPTP VPN也可以通过IGW Amazon建议您使用FDQN,即使您在内部并查找外部FDQN,您也将获得本地IP 我不知道这在经典的EC2中是怎样的,但我只能猜测它的相似之处 如果您确实需要公共IP,您可以通过使用Amazon服务来找到:
curl http://169.254.169.254/latest/meta-data/public-ipv4
或
(请参见此处:)如何调用PHP脚本?如果它没有路由到Internet并返回,您很可能会得到一个内部适配器地址。它直接在index.phpNo中,我的意思是请求PHP脚本的是什么?您是否在本地对其进行http请求?啊,对不起。是的,这是一个HTTP请求(我使用浏览器),也从我的手机请求了页面,同样的问题。这完全有道理。当您使用VPN连接时,您基本上充当主机。为了证明我的观点,您甚至可以在手机上访问
localhost
(通过VPN连接),您应该可以访问您的站点。
curl http://169.254.169.254/latest/meta-data/local-ipv4