Docker环境下Django获取浏览器访问IP的相关疑问
Django容器环境下获取访问来源IP问题解答
疑问1:10.0.0.2这个IP来自哪里?
10.0.0.2是Docker默认网桥(docker0)的网关IP。你在宿主机用127.0.0.1访问容器端口时,请求会经过Docker的端口转发机制,容器视角里的请求来源就是网桥的网关地址,而非宿主机的127.0.0.1或LAN IP。
疑问2:应该访问request.META中的哪个键来记录访问来源IP?
分场景处理:
- 宿主机本地用LAN IP访问:先确保容器端口映射绑定到
0.0.0.0(而非仅127.0.0.1),然后用宿主机LAN IP(http://192.168.0.100:9001)访问,此时request.META.get('REMOTE_ADDR')会返回宿主机的LAN IP。 - 局域网内其他设备访问:同样保证端口映射绑定
0.0.0.0,设备通过宿主机LAN IP访问,REMOTE_ADDR会直接返回访问设备的真实LAN IP。 - 后续添加反向代理场景:如果部署了Nginx等反向代理,需要配置代理传递真实IP(比如设置
X-Forwarded-For请求头),此时你的原有代码就能通过HTTP_X_FORWARDED_FOR拿到真实IP,REMOTE_ADDR会是代理服务器的IP。
注意:HTTP_ORIGIN和HTTP_REFERER记录的是浏览器地址栏的URL,并非真实的来源IP,不能用于记录访问来源。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

