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

如何解决Drupal9使用负载均衡时出现的Base url配置失效问题

Drupal 9相比Drupal 8强化了反向代理请求的安全校验,你原有配置失效的核心原因是reverse_proxy_addresses的动态赋值逻辑不再被Drupal 9兼容,且缺少协议相关的头配置,可按以下步骤调整:


解决方案

1. 替换动态反向代理地址配置

不要使用array($_SERVER['REMOTE_ADDR'])这种动态获取的方式,Drupal 9要求必须明确指定可信的负载均衡IP/IP段,示例:

// 替换为你实际的负载均衡服务器IP,多个IP可依次添加
$settings['reverse_proxy_addresses'] = [
  '10.101.9.23', // 此处替换为你的负载均衡实际IP
];

2. 补充完整反向代理头配置

除了自定义的Host头,还需要补充协议、端口相关的头配置,避免出现HTTP/HTTPS跳转或端口异常问题,完整配置参考:

$settings['reverse_proxy'] = TRUE;
$settings['reverse_proxy_addresses'] = ['你的负载均衡实际IP'];
$settings['reverse_proxy_host_header'] = 'X-ORIGINAL-HOST';
// 新增协议头配置,对应负载均衡传递的协议头字段
$settings['reverse_proxy_proto_header'] = 'X-Forwarded-Proto';
// 如有非标准端口需求可以补充端口头配置
$settings['reverse_proxy_port_header'] = 'X-Forwarded-Port';

$settings['trusted_host_patterns'] = [
  '^d9\.johndoe\.dev$',
  '^10\.101\.9\.23$',
];

3. 强制固定Base URL(兜底方案)

如果调整代理配置后仍然不生效,可以直接在settings.php中强制覆盖请求的Host、协议参数,完全替代已弃用的$base_url配置:

// 按你实际的站点信息修改以下参数
$site_domain = 'd9.johndoe.dev';
$site_protocol = 'https'; // 站点实际协议,填http或https
$site_port = ''; // 非80/443端口时填写,比如':8080'

// 强制覆盖全局请求参数
$_SERVER['HTTP_HOST'] = $site_domain . $site_port;
$_SERVER['HTTPS'] = $site_protocol === 'https' ? 'on' : 'off';
$_SERVER['SERVER_PORT'] = $site_protocol === 'https' ? 443 : 80;

4. 配置校验

修改完成后清空Drupal全站缓存,访问站点检查页面内链接的域名是否已经替换为预设的base URL,同时确认后台状态报告无反向代理相关的告警即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:57:02