6

我在一个有很多 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/fooor http://10.0.0.2/foo- 但request.get_host()将返回10.10.10.10,而不是服务器正在侦听的实际 IP。

谢谢,本

4

2 回答 2

5
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] 是你的地址

于 2013-07-11T14:00:19.783 回答
0

如果您的目标是确保负载均衡器正常工作,我想在应用程序代码中执行此操作并不是绝对要求。您可以使用网络数据包分析器,它可以侦听特定接口(例如tcpdump -i <interface>)并查看输出。

于 2013-07-11T17:01:39.640 回答