django 取得发布信息用户的 Ip 总是取得 127.0.0.1 这个, 并不是真实用户的 ip?

2021-11-17 16:05:29 +08:00
 python30
class tkinfo(models.Model):
	author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name = _('author'), on_delete=models.CASCADE)
	title = models.CharField(max_length=255, verbose_name = u'信息标题')
	body = models.TextField()
	excerpt = models.CharField(_(u'话题简介'), default='', max_length=2000, blank=True, null = True)
	ip_user = models.GenericIPAddressField(unpack_ipv4=True, blank=True, null=True) 

ip_user = models.GenericIPAddressField(unpack_ipv4=True, blank=True, null=True) 用这个以前是可以取得用发布信息用户的真实 ip 地址的

最近换了服务器。centos 宝塔 搭建的环境 django2.2 + python3.x + nginx +uwsgi

取得的 ip 地址都是 127.0.0.1 了。 查了半天也没发现哪里有问题? 有知道或遇到过这问题的吗? 多谢

2501 次点击
所在节点    Python
11 条回复
hguandl
2021-11-17 16:09:48 +08:00
目测是 nginx 反代时没有设置好 header 。用户的访问通过 nginx 转发到 Django ,IP 当然变成了 localhost 。解决方法是在 nginx 的反代里添加有关来源 IP 的 header ,一般是叫 X-Forwarded-For 或者 X-Real-IP 之类的。网上应该能搜到更具体的教程。
demo
2021-11-17 16:11:58 +08:00
workg
2021-11-17 16:12:52 +08:00
nginx 反带要带上 request ip header 。你直接访问 django 服务是可以拿到 ip 的
Vegetable
2021-11-17 16:16:22 +08:00
这种问题也需要提问吗
https://cn.bing.com/search?q=django+%E8%8E%B7%E5%8F%96ip+127.0.0.1
csdn 都安排的明明白白的
python30
2021-11-17 16:37:47 +08:00
@hguandl
<img src="https://z3.ax1x.com/2021/11/17/I5COK0.png" />
这是反向代理那里的设置。有什么需要修改的吗?
python30
2021-11-17 16:38:41 +08:00
@demo
@Vegetable
谢谢。晚上回去测试一下试试看。
python30
2021-11-17 16:40:24 +08:00
@workg
我以前直接在 centos 里安装 nginx+uwsgi 环境,是可以直接用上面的代码拿到真实 ip 的,最近换到了宝塔面板上的那个 python 环境里就取不到真实 ip 了。
hguandl
2021-11-17 16:54:06 +08:00
看起来 nginx 做了设置,那可能就是 django 应用里没有处理好。我不了解这个框架,可以参照前面几楼里的说法,查查 django 的资料看看如何处理这个 proxy header 。
meiyoumingzi6
2021-11-17 19:08:37 +08:00
从 XFF 中获取 ip
python30
2021-11-17 20:23:40 +08:00
@meiyoumingzi6 有演示吗?或者具体说一下? xiexie
conight
2021-11-18 17:24:49 +08:00
HTTP_CF_CONNECTING_IP -> HTTP_X_FORWARDED_FOR -> REMOTE_ADDR

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/816069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX