簡體   English   中英

Django runserver綁定到0.0.0.0,我怎么能得到哪個IP接受了請求?

[英]Django runserver bound to 0.0.0.0, how can I get which IP took the request?

我在擁有大量IP地址的主機上運行臨時Django應用程序。 當使用manage.py runserver 0.0.0.0:5000 ,如果可能的話,代碼怎么能看到機器的多個IP地址中的哪一個是請求實際命中的?

或者換一種說法:

我的主機有IP地址10.0.0.110.0.0.2 當runserver正在監聽0.0.0.0 ,我的應用程序如何知道用戶是否訪問http://10.0.0.1/app/path/etchttp://10.0.0.2/app/path/etc

據我所知,如果我使用Apache,我可以使用Apache環境變量,如SERVER_ADDR ,但我沒有使用Apache。

有什么想法嗎?

編輯

更多信息:

我正在使用一個小型Django應用程序測試負載均衡器。 這個應用程序正在偵聽許多不同的IP,我需要知道通過負載均衡器發出的請求中的哪個IP地址被命中,因此我可以確保它正確平衡。

我不能使用request.get_host()request.META選項,因為它們返回用戶輸入的內容以命中負載均衡器。

例如:用戶點擊http://10.10.10.10/foo並將請求轉發到http://10.0.0.1/foohttp://10.0.0.2/foo - 但是request.get_host()將返回10.10.10.10 ,而不是服務器正在偵聽的實際IP。

謝謝,本

request.get_host()

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_host

但請注意,這可能會被欺騙,所以不要在其上傳遞您的安全性。

如果用戶在相同的地址下看到你的機器,我不確定這是否可以通過runserver(它應該是簡單的開發工具)。

也許你可以使用nginx? 或者,如果這僅用於測試,請執行以下操作:

for i in 1 2 3 4 5; do manage.py runserver 10.0.0.$i:5000; done

然后sys.args [2]是你的地址

如果您的目標是確保負載均衡器正常工作,我認為在應用程序代碼中執行此操作並不是絕對必要的。 您可以使用可以偵聽特定接口(例如, tcpdump -i <interface> )並查看輸出的網絡數據包分析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM