![](/img/trans.png)
[英]How can I execute Python Django runserver command in Jupyter Notebook?
[英]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.1
和10.0.0.2
。 當runserver正在監聽0.0.0.0
,我的應用程序如何知道用戶是否訪問http://10.0.0.1/app/path/etc
或http://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/foo
或http://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.