我有一个PHP脚本作为cron任务从我们服务器的非公开访问目录运行。该脚本将cURL POSTs发送到可公开访问的URL。为什么file_get_contents()和cURL POST有两个不同的原始IP地址?
我使用.htaccess文件设置了接收URL,该文件拒绝除我允许的IP地址以外的任何IP地址访问。我运行了一个PHP脚本,通过电子邮件将file_get_contents("http://www.whatismyipaddress.com");
的输出发送到我的服务器的起始IP地址(这是一个专用服务器,所以我不希望它会改变)。这是我在.htaccess文件中允许的IP。
但是当我通过SSH提示运行脚本时,所有的POST都返回了403 Forbidden错误。当我注释掉.htaccess保护时,POST成功了。
然后我看了看自己的日志文件,结果发现邮件来自与我的file_get_contents()
报告不同的IP。将该IP添加到修复问题的.htaccess文件很容易。
但我很困惑,为什么有两个不同的起源IP地址。任何人都可以谈谈这个问题吗?
不知道防火墙/ NAT,但我认为这是可能的。我不知道其他获取原始IP的方法,这些方法听起来也不错。当以cron运行时通过命令提示符运行时也不能确定脚本的不同IP。在看到cron失败后,我通过命令提示符完成了所有测试。我在脚本中同时拥有了file_get_contents()和cURL,并且(事实证明)他们不同意。所以这可能是正确的,但我不认为这是我看到的不同IP的原因。 –
更新了我的答案,请尝试。 – ntaso
此外,它看起来像你链接的问题中的大多数方法是获取内部网络IP,这是不同于服务器的原始IP地址。 –