我有一個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地址。 –