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/
java InetAddress.getLocalHost();返回 127.0.0.1 ...如何获得真实 IP?
即使配置了 Allowed_Host = ['localhost','127.0.0.1'],Django Debug = False 也会返回错误请求