Django获取IP只返回127.0.0.1
我搭建了一个使用gunicorn、nginx和django的网络服务器。
我在远程访问这个服务器,使用的是:
def testIP(request):
ip_address = utils.get_ip(request)
但是我一直得到的都是127.0.0.1这个IP地址。正如我所说,我是在远程访问,所以不应该返回一个本地地址。
我觉得这可能和gunicorn有关,但我想先在这里看看大家有没有什么见解。
1 个回答
28
get_ip() 是怎么工作的?
如果 nginx 是反向代理,而 gunicorn 是应用服务器,那么它总是从本地的 nginx 接收请求。
nginx 发送给应用服务器的真实 IP 地址在我的情况下是通过 HTTP_X_REAL_IP
这个头部来传递的,这个设置是在 nginx 的配置文件中通过 proxy_set_header X-Real-IP $remote_addr;
这一行来实现的。
所以你可能需要设置这个,然后在你的 Django 应用中处理不同的头部信息,可以选择使用新的 IP 头部,或者把 request.META['REMOTE_ADDR']
设置为 request.META['HTTP_X_REAL_IP']
。