2009-11-22 39 views

回答

6

您是否有任何一種代理,網關或負載均衡器在該遠程主機上運行?這就是那種會導致連接看起來像127.0.0.1的事情(因爲就Web服務器而言,這是直接連接)。

+5

爲了推動這一點,你可以檢查X - 轉發,對於HTTP標頭存在,這應該包含你想要的IP。 – Lepidosteus 2009-11-22 18:21:05

+1

你應該小心依靠X-Forwarded-For,它很容易被欺騙。事實上,Django曾經有一箇中間件可以基於X-Forwarded-For自動設置REMOTE_ADDR,但是由於它試圖讓人們依賴於不可靠的東西,所以將其移除了。 – 2009-11-23 20:42:42

+0

「容易被欺騙」是有害的。這個頭文件沒有什麼特別之處:它就像任何其他HTTP頭一樣。如果服務器位於代理之後,則幾乎100%確定該代理在將其替換爲適當的值之前將放棄現有的X-Forwarded-For標頭。但是,如果服務器不在代理之後,依靠X-Forwarded-For標頭是無用的,因爲用戶可以手動設置該標頭。無論如何,當使用基於IP的安全性(風險)時,永遠不要信任來自代理的連接。 – sleblanc 2013-02-19 19:24:20

0

如果你在一個代理的後面並且運行apache作爲web服務器,你可以使用mod_rpaf。代理只需要發送X-Forwarded-For或X-Real-IP頭。

http://stderr.net/apache/rpaf/

相關問題