在Django中,为什么REMOTE_ADDR会在web服务器上返回127.0.0.1?

8 投票
2 回答
2871 浏览
提问于 2025-04-15 18:31

当你使用 request.META['REMOTE_ADDR'] 这段代码来获取IP地址时,在本地系统上运行是没问题的。但是当你把它放到网络服务器上时,得到的IP地址却是127.0.0.1。这种情况该怎么解决呢?

2 个回答

2

如果你在使用代理服务器,并且你的网页服务器是Apache,你可以使用mod_rpaf这个工具。这个代理只需要发送一些特定的信息,比如X-Forwarded-For或者X-Real-IP这些头部信息。

http://stderr.net/apache/rpaf/

10

你的网络服务器可能是在一个负载均衡器后面。你可以试着使用 request.META['HTTP_X_FORWARDED_FOR'] 来获取一些信息。

或者更好的是,看看这本 Django 书籍的第15章 - 里面有关于 中间件是什么?反向代理支持(X-Forwarded-For 中间件) 的内容。

撰写回答