1. 为什么需要客户端IP透传?
在分布式数据库架构中,客户端通常不会直接连接到后端数据库节点,而是通过负载均衡器(如Nginx、HAProxy)进行请求分发。这种架构带来一个关键问题:数据库服务端看到的连接来源IP都是负载均衡器的IP,而非原始客户端的真实IP。
这种IP信息丢失会导致:
- 无法基于客户端IP实施精细化的访问控制(如IP白名单)
- 审计日志无法记录真实请求来源
- 故障排查时难以追踪问题源头
以Apache Doris为例,当需要限制特定IP访问或分析查询来源时,如果只能看到负载均衡器的IP,这些功能就完全失效了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Proxy Protocol工作原理解析
Proxy Protocol是HAProxy作者Willy Tarreau提出的一种网络协议,它通过在TCP连接建立后立即发送一个包含原始连接信息的头部,来解决源IP透传问题。
2.1 协议版本对比
目前存在两个版本:
- V1(文本版):人类可读的ASCII格式,形如:
code复制PROXY TCP4 192.168.1.100 192.168.1.101 56324 3306\r\n - V2(二进制版):更紧凑的二进制格式,支持更多协议类型
Doris目前仅支持V1版本,这是因为:
- MySQL协议本身是文本协议,V1版本更匹配
- 实现复杂度较低,满足基本需求
- 主流负载均衡器都支持V1
2.2 协议交互流程
典型的工作流程如下:
- 客户端(IP: 10.0.0.2)连接负载均衡器(IP: 192.168.1.100)
- 负载均衡器与Doris FE建立连接时,先发送Proxy Protocol头:
code复制PROXY TCP4 10.0.0.2 192.168.1.101 34567 9030\r\n - Doris解析头部获取真实客户端IP(10.0.0.2)
- 后续MySQL协议交互正常进行
3. Doris配置详解
3.1 基础配置
在fe.conf中添加:
properties复制enable_proxy_protocol = true
关键注意事项:
- 版本兼容性:
- 3.1+版本:
