我有一个PHP脚本,它从我们服务器的非公共可访问目录运行,作为cron任务。该脚本将cURL POST发送到可公开访问的URL。
我使用.htaccess文件设置接收URL,该文件拒绝从我允许的IP地址以外的任何IP地址进行访问。我运行了一个PHP脚本,通过电子邮件发送了file_get_contents("http://www.whatismyipaddress.com");
的输出来获取我的服务器的原始IP地址(它是一个专用服务器,所以我不希望它改变)。这是我在.htaccess文件中允许的IP。
但是当我通过SSH提示运行脚本时,所有POST都返回了403 Forbidden错误。当我注释掉.htaccess保护时,POST成功了。
然后我查看了我的日志文件,结果发现POST来自与我file_get_contents()
报告的IP不同的IP。将该IP添加到.htaccess文件很容易,这解决了问题。
但我很困惑为什么有两个不同的原始IP地址。任何人都可以对这个问题有所了解吗?
答案 0 :(得分:1)
首先,这是查找服务器IP地址的奇怪方法。试过这些?
PHP how to get local IP of system
第二:你知道服务器是否在防火墙/ NAT之后或其他重定向流量的东西吗?可能是允许通过Web服务器从您的服务器传出流量,但是从命令行调用流量(不同的PHP进程)通过代理进入另一条路径,这样您最终会在目标服务器中使用2个不同的IP地址。 / p>
编辑:澄清了一些事情
Edit2:试试这个:
在可公开访问的服务器上,设置包含以下内容的脚本i.php
:
<?php die($_SERVER['REMOTE_ADDR']); ?>
然后,在运行cron的私有服务器上,创建一个类似的脚本:
<?php echo file_get_contents("http://publicserver.com/i.php"); ?>
从浏览器运行它。然后通过SSH从shell运行它。然后,通过SSH,执行以下命令:
curl http://publicserver.com/i.php
比较输出。一切都一样吗?