AWS架构中Moodle部署出现无限重定向循环的问题排查求助
AWS架构中Moodle部署出现无限重定向循环的问题排查求助
这种无限重定向的问题在ALB做SSL终止的架构里真的挺常见的,大概率是后端的Apache或者Moodle没正确识别到原始请求的HTTPS协议,导致重复触发重定向规则,陷入循环。我给你梳理几个核心排查点,按优先级来:
1. 先确认Moodle的代理SSL配置
Moodle本身有专门的参数来适配反向代理(比如你的ALB)场景,这是最容易踩坑的点:
- 登录到EC2实例,找到Moodle根目录下的
config.php文件- 确保
$CFG->wwwroot设置的是你的HTTPS域名,比如:$CFG->wwwroot = 'https://your-moodle-domain.com'; - 一定要添加
$CFG->sslproxy = true;,这个参数会告诉Moodle它运行在SSL代理后面,会信任ALB转发的X-Forwarded-Proto头,否则Moodle会认为当前请求是HTTP的,进而强制重定向到HTTPS,触发循环 - 检查
$CFG->force_sslwww参数,如果设置为true(一般生产环境建议开),必须配合sslproxy=true一起用,不然就会出现你遇到的问题
- 确保
2. 配置Apache识别ALB的转发头
ALB做HTTPS终止后,转发给EC2的是HTTP请求,所以需要让Apache通过X-Forwarded-Proto头知道原始请求是HTTPS的:
- 首先确保Apache启用了
mod_headers和mod_setenvif模块,执行命令检查:
如果没看到这两个模块,需要用apachectl -M | grep -E 'headers|setenvif'a2enmod headers setenvif启用(Debian/Ubuntu系),或者在httpd.conf里加载模块(RHEL/CentOS系) - 在Apache的虚拟主机配置文件(或者httpd.conf)里添加以下配置:
# 识别X-Forwarded-Proto头,标记请求为HTTPS SetEnvIf X-Forwarded-Proto "https" HTTPS=on # 确保转发头正确传递 RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME} - 如果你用了
.htaccess做重定向,一定要把基于%{HTTPS}的判断改成基于X-Forwarded-Proto,比如把原来的:
修改为:RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
不然Apache会一直认为当前请求是HTTP,重复触发重定向RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
3. 验证ALB的转发配置
虽然ALB默认会转发X-Forwarded-Proto、X-Forwarded-For这些头,但可以简单验证一下:
- 在EC2实例上用curl模拟ALB的请求:
看返回的响应头里curl -H "X-Forwarded-Proto: https" http://localhost/Location是不是还指向HTTPS,如果还是的话,说明问题在后端配置,不在ALB
4. 排查Apache的全局重定向规则
有时候全局的Apache配置里可能有强制HTTPS的规则,比如在httpd.conf里的Directory段或者其他地方,一定要检查这些规则是不是也适配了代理场景,避免和Moodle的重定向规则冲突
先从这几个点一步步排查,90%的概率是Moodle的sslproxy参数没开,或者Apache没正确处理转发头导致的。
内容来源于stack exchange
相关产品推荐
相关产品推荐

