Django 获取 IP 只返回 127.0.0.1

Posted

技术标签:

【中文标题】Django 获取 IP 只返回 127.0.0.1【英文标题】:Django get IP only returns 127.0.0.1 【发布时间】:2011-05-29 13:55:47 【问题描述】:

我有一个使用 gunicorn 和 nginx 和 django 设置的网络服务器。

我正在远程访问它,并且使用这个:

def testIP(request):
    ip_address = utils.get_ip(request)

我只是不断得到一个 127.0.0.1 的 IP 地址,就像我说我正在远程访问它,因此它不应该提供本地地址。

我认为这可能与 gunicorn 有关,但我想先查看这里,看看你们是否有任何见解。

【问题讨论】:

你是如何将 nginx 连接到 gunicorn 的? 【参考方案1】:

get_ip() 是如何工作的?

如果 nginx 是反向代理,gunicorn 是应用服务器,它总是从本地机器上的 nginx 获取请求。

在我的例子中,nginx 发送到应用服务器的真实 ip 是 HTTP_X_REAL_IP,通过 nginx conf 行 proxy_set_header X-Real-IP $remote_addr;

因此,您可能想要设置它,并在您的 django 应用帐户中使用新的 IP 标头或设置 request.META['REMOTE_ADDR'] = request.META['HTTP_X_REAL_IP'] 来设置不同的标头

【讨论】:

@DantheMan:一个不同的(也许更好的)想法是使用反向代理中间件:docs.djangoproject.com/en/dev/ref/middleware/… @WoLpH -- 酷!我不知道他们因为常用而烘烤了它,但它看起来像是在 1.1 中被删除了? 你是对的。它已被删除,因为如果您不验证代理服务器可能会很危险。但是原始代码仍然可用,并且就像一个魅力:) @WoLpH 该中间件在 Django 1.1 中已被弃用 docs.djangoproject.com/en/dev/releases/1.1/… ***.com/questions/34244217/… 为我工作。因为我在 django 中使用 request.META.get('HTTP_X_FORWARDED_FOR')

以上是关于Django 获取 IP 只返回 127.0.0.1的主要内容,如果未能解决你的问题,请参考以下文章

我可以获取flask_ngrok或py-ngrok生成的ip地址或域名并返回到127.0.0.1/

DJANGO获取用户访问IP

Express - req.ip 返回 127.0.0.1

java InetAddress.getLocalHost();返回 127.0.0.1 ...如何获得真实 IP?

即使配置了 Allowed_Host = ['localhost','127.0.0.1'],Django Debug = False 也会返回错误请求

解决java获取访问用户的ip都是127.0.0.1