You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HAPROXY记录本机访问IP异常:为何记录Docker网关IP而非WiFi IP?

问题:本机访问Docker部署的HAProxy时无法记录真实WiFi IP

环境配置

Docker Compose的HAProxy端口配置

我在Docker Compose的HAProxy服务中使用长语法指定端口模式:

services:
    haproxy:
        ports:
            - target: 80
              published: 9763
              protocol: tcp
              mode: host

HAProxy后端配置

在HAProxy的backend段添加了以下配置:

backend api
    option forwardfor
    http-request add-header X-Client-IP %[src]
    http-request add-header X-FrontEnd-IP %[dst]

启动命令与本机IP信息

  • 执行命令启动容器:docker stack deploy -c docker-compose.yml mystack
  • 执行hostname -I得到本机所有IP:
$ hostname -I
192.168.0.102 172.18.0.1 172.17.0.1 172.19.0.1 192.168.49.1 
  • 本机WiFi网卡IP为192.168.0.102
  • 本机可通过三个地址访问应用:http://172.18.0.1:9763/、http://127.0.0.1:9763/、http://192.168.0.102:9763/

访问测试结果

本机访问时的请求头

通过上述三个URL访问Django应用时,Python代码获取到的请求头如下:

'HTTP_X_CLIENT_IP' : '172.18.0.1,172.18.0.1'
 'HTTP_X_FRONTEND_IP' : '172.18.0.9'
 'HTTP_X_FORWARDED_FOR' : '172.18.0.1'

由于我记录'HTTP_X_FORWARDED_FOR',因此172.18.0.1被存入数据库。

平板访问时的请求头

平板与本机连接同一路由器,仅能通过http://192.168.0.102:9763/login访问应用,此时请求头如下:

'HTTP_X_CLIENT_IP' : '192.168.0.103,192.168.0.103'
 'HTTP_X_FRONTEND_IP' : '172.18.0.9'
 'HTTP_X_FORWARDED_FOR' : '192.168.0.103'

192.168.0.103被存入数据库。

疑问

  • 本机WiFi网卡IP为192.168.0.102,但记录的却是172.18.0.1,为何不能像平板那样记录真实IP?
  • 本机访问时请求头中为何会添加172.18.0.1?
  • 如何修改才能在本机访问时记录192.168.0.102?

内容的提问来源于stack exchange,提问作者MsA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:15:11