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

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 ~ .*"

四、验证效果

  1. 访问https://mypage.com/,确认页面正常加载无404
  2. 访问https://mypage.com/typo3/,检查是否直接停留在HTTPS的登录页
  3. 用浏览器开发者工具看请求头,确认X-Forwarded-Proto: https被正确传递,响应头里的跳转地址都是HTTPS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:10:18