Typo3 v11站点配置HTTPS触发404及后台跳转异常求助
一、先搞定代理层的HTTPS标识传递
你的架构里HAProxy已经解密HTTPS,后端Apache收到的是HTTP请求,TYPO3 v11需要明确知道原始请求是HTTPS,同时要保证路由匹配正确,得从代理层开始调整:
1. HAProxy配置修改
在后端转发规则里加这两行,给后端传递HTTPS的标识头:
http-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Port 443 if { ssl_fc }
意思是只要原始请求是HTTPS,就给后面的服务发X-Forwarded-Proto: https和X-Forwarded-Port:443这两个头。
2. Varnish配置调整
确保Varnish不会把这些头过滤掉,在VCL的vcl_recv阶段保留并传递:
sub vcl_recv { # 保留转发过来的HTTPS标识头 if (req.http.X-Forwarded-Proto) { set req.http.X-Forwarded-Proto = req.http.X-Forwarded-Proto; } if (req.http.X-Forwarded-Port) { set req.http.X-Forwarded-Port = req.http.X-Forwarded-Port; } # 你的其他原有规则... }
另外在vcl_backend_response阶段加个规则,防止后端返回的重定向地址变成HTTP:
sub vcl_backend_response { if (bereq.http.X-Forwarded-Proto == "https") { set beresp.http.Location = regsub(beresp.http.Location, "^http://", "https://"); } }
3. Apache配置调整
先启用mod_remoteip和mod_headers模块,然后配置信任代理IP段,让Apache识别原始请求的协议:
# 加载必要模块 LoadModule remoteip_module modules/mod_remoteip.so LoadModule headers_module modules/mod_headers.so # 替换成你的HAProxy和Varnish实际IP段 RemoteIPTrustedProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 # 让Apache从转发头获取原始协议 RemoteIPHeader X-Forwarded-For Header set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
同时确保Apache虚拟主机的ServerName和ServerAlias配置正确,监听端口和代理转发的端口匹配(一般是80)。
二、TYPO3核心配置修正
修改LocalConfiguration.php或者AdditionalConfiguration.php,让TYPO3信任代理并使用正确的HTTPS入口:
1. 基础代理信任和站点配置
# 替换成你的实际域名正则 $GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern'] = '^mypage\.com$'; # 替换成你的代理IP段 $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyIP'] = '10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'; $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyHeaderMultiValue'] = 'first'; # 指定用哪个头判断HTTPS $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxySSLHeader'] = 'X-Forwarded-Proto'; $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyPortHeader'] = 'X-Forwarded-Port'; # 设置站点的HTTPS基础地址,替换成你的根页面ID $GLOBALS['TYPO3_CONF_VARS']['SYS']['site'] = [ 'base' => 'https://mypage.com/', 'rootPageId' => 1 ];
也可以直接在TYPO3后台的站点配置里,把站点Base设为https://mypage.com/,然后在“配置”标签页开启“使用反向代理”,填写信任IP段和对应头信息。
2. 修复后台重定向问题
如果访问https://mypage/typo3/还是跳HTTP,强制指定前后台的HTTPS地址:
$GLOBALS['TYPO3_CONF_VARS']['BE']['baseUrl'] = 'https://mypage.com/typo3/'; $GLOBALS['TYPO3_CONF_VARS']['FE']['baseUrl'] = 'https://mypage.com/';
同时检查站点配置里的路由规则,有没有硬编码的HTTP地址。
三、清理Varnish缓存
所有配置改完后,必须清掉Varnish的旧缓存,避免残留问题:
varnishadm "ban req.url ~ .*"
四、验证效果
- 访问
https://mypage.com/,确认页面正常加载无404 - 访问
https://mypage.com/typo3/,检查是否直接停留在HTTPS的登录页 - 用浏览器开发者工具看请求头,确认
X-Forwarded-Proto: https被正确传递,响应头里的跳转地址都是HTTPS
内容的提问来源于stack exchange,提问作者Lars

