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

Drupal洪水控制功能无法获取正确客户端IP地址问题求助

问题分析与解决方案

问题原因

请求链路为客户端 → 交换机(149.32.195.197) → 负载均衡(172.17.21.5) → Drupal服务器,因此X-Forwarded-For头呈现为客户端IP, 交换机IP的格式。当前仅将负载均衡IP加入reverse_proxy_addresses可信列表,Drupal/Symfony仅信任来自负载均衡的请求头,但无法识别交换机也是可信代理,导致解析客户端IP时,错误将X-Forwarded-For中最后一个非可信代理的IP(交换机IP)判定为客户端IP。

解决方案

1. 扩展可信代理列表

更新settings.php中的reverse_proxy_addresses,把交换机IP也添加进去:

/* 设置反向代理(负载均衡器+交换机)地址 */
$settings['reverse_proxy_addresses'] = ['172.17.21.5', '149.32.195.197']; // test-bnc4-web1 + 交换机

配置后,Drupal会将交换机和负载均衡都视为可信代理,解析X-Forwarded-For时会自动移除所有可信代理的IP,最终保留最左侧的真实客户端IP。

2. 规范IP获取逻辑

若修改配置后问题仍存在,需检查登录失败日志的IP获取代码,确保使用Drupal标准方式获取客户端IP:

// 正确获取客户端IP的方式
$ip = \Drupal::request()->getClientIp();

避免直接读取$_SERVER['X_FORWARDED_FOR']或$_SERVER['REMOTE_ADDR'],这类值未经过Drupal的反向代理解析处理,无法保证准确性。

3. 验证负载均衡头转发配置

确认负载均衡在转发请求时,正确保留上游的X-Forwarded-For头(即交换机添加的客户端IP),而非覆盖或错误追加自身IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:45:35