【发布时间】:2013-07-11 13:44:28
【问题描述】:
我正在一个有很多 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 执行此操作,我可以使用像 SERVER_ADDR 这样的 Apache 环境变量,但我没有使用 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。
谢谢, 本
【问题讨论】:
-
为什么不直接绑定到特定的ip呢?
python manage.py runserver 10.0.0.1(2):5000 -
我认为@Ben 想说的是服务器如何检测请求命中的IP?
-
是的@GamesBrainiac,这正是我的意思:)
-
我知道,但是,为什么要麻烦,django 的服务器不打算用于生产。我只是建议,无论如何这是一个非常有效的问题:)