【问题标题】:What's the best way for a Django app to get the current IP address of eth0 [duplicate]Django应用程序获取eth0当前IP地址的最佳方法是什么[重复]
【发布时间】:2014-03-03 09:43:55
【问题描述】:

我有一个 Django 应用程序(出于晦涩的原因)需要知道它运行的服务器的 IP 地址才能将其呈现给客户端。我可以很确定服务器将启动并运行eth0,所以真的,我需要eth0 的地址。

获得这个的最佳方法是什么?理想情况下,这应该在 uwsgi 启动时枚举,而不一定是每个请求。我曾考虑在 settings.py 中添加一些代码,但认为这可能会在每个请求上运行/枚举。

edit 我应该补充一点,这是一个 debian linux 服务器,运行 nginx 并在 uwsgi 中运行 Django 应用程序。

【问题讨论】:

  • 您的本地 eth0 接口的 IP 地址可能与您的客户看到的不同,并且可能无法从他们这边访问(例如,它可能在专用网络上)
  • 一般情况下是这样,但在这种特定情况下,eth0 的 IP 是与客户端相关的 IP。
  • 究竟是什么设置......它是在 django 之上的 uwsgi 之上的 nginx(例如)吗?
  • 是的,抱歉,应该包含在问题中。已更新。
  • @growse 那么你是在 nginx 服务器的 IP 之后吗? (例如......堆栈的“最外层”部分?)或者,uwsgis(主/从)在哪里,或者 django 应用程序服务器来自哪里......?

标签: python django


【解决方案1】:

这是我用来获取面向公众的 ip 的代码(在 *nix 系统上):

# Hack to find machine NIC IP
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.4.4", 80))
MACHINE_IP = s.getsockname()[0]
s.close()

【讨论】:

  • 关于将其集成到 Django 中的最佳方法的任何想法,以便它在应用程序启动时运行并将结果存储在某个地方?
  • 您可以将此代码放入settings.py。所以以后可以用作settings.MACHINE_IP
  • 我试试看,谢谢。我担心的是,如果对每个请求都进行评估,它可能会对性能产生影响。
  • settings.py 不会针对每个请求进行评估,所以你应该很高兴。
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
相关资源
最近更新 更多