Drupal7配置HTTPS跳转后新增AWS负载均衡CSS/JS请求仍为HTTP如何解决
问题根本原因
你配置的重定向规则逻辑没问题,但Drupal 7生成静态资源链接时,依赖服务端实际收到的请求协议拼接链接前缀。新增AWS负载均衡后,负载均衡到后端Lightsail实例的请求默认走HTTP协议,Drupal接收到的请求本身是HTTP,因此生成的所有站内资源链接默认都是HTTP前缀。你的重写规则仅作用于入站请求,不会修改Drupal输出HTML内容里的资源链接,所以浏览器会直接请求HTTP版本的资源,才会出现该问题。
排查与解决步骤
- 第一步:确认负载均衡请求头配置
AWS ALB默认会携带X-Forwarded-Proto头,值为用户真实请求的协议(http/https),你需要先在Drupal配置中开启对这个头的识别,否则Drupal不会判定当前请求为HTTPS。 - 第二步:修改Drupal 7的
settings.php配置
找到站点根目录下sites/default/settings.php文件,在末尾添加以下配置:
如果你的负载均衡有固定出口IP,建议把# 告诉Drupal信任负载均衡发来的X-Forwarded-Proto头 $conf['reverse_proxy'] = TRUE; $conf['reverse_proxy_addresses'] = array($_SERVER['REMOTE_ADDR']); # 强制根据X-Forwarded-Proto设置请求协议 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; $_SERVER['SERVER_PORT'] = 443; }reverse_proxy_addresses的值替换为实际的负载均衡IP段,安全性更高。 - 第三步:清空Drupal全部缓存
登录Drupal后台,进入「配置」-「性能」,点击「清空所有缓存」,Drupal 7会缓存生成的CSS/JS聚合文件链接,不清空缓存的话旧的HTTP链接还会继续生效。 - 第四步:检查站点基础URL配置
确认settings.php里的$base_url参数是否设置为HTTPS前缀的域名,示例:
如果之前配置的是HTTP前缀的地址,直接改成HTTPS即可。$base_url = 'https://你的实际域名.com'; - 第五步:验证资源链接是否生效
配置完成后可以用curl命令测试页面输出的资源链接是否已经替换为HTTPS:
确认输出的资源链接前缀都是HTTPS即可。curl -s https://你的实际域名 | grep 'script\|link'
内容的提问来源于stack exchange,提问作者pglatz
相关产品推荐
相关产品推荐

