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

Docker三容器部署WordPress出现too_many_redirects错误排查

重定向循环的核心诱因
  • 反向代理协议头传递缺失:你配置的apache-letsencrypt容器在443端口做HTTPS反向代理时,是用HTTP协议把请求转发给WordPress容器的8073端口,但没有向后端传递「原始请求为HTTPS」的标识。
    WordPress拿到的请求是标准HTTP协议请求,但你在wp_options表中设置的站点地址是https://www.example.com,WordPress内置逻辑会检测到请求协议与站点配置协议不匹配,自动生成301重定向跳转到HTTPS地址。
    跳转后的请求再次回到外层Apache的443端口,Apache又以HTTP协议转发给WordPress,WordPress再次触发协议检测跳转,直接形成无限重定向循环。
  • 配置冗余与路径不匹配:
    • 给apache-letsencrypt服务同时配置了network_mode: host和ports端口映射,host网络模式下端口映射配置会被Docker直接忽略,完全不生效
    • WordPress容器内vhost配置的DocumentRoot /var/www/example.com,和你实际存放站点文件的容器内路径/var/www/www.example.com不匹配,会导致后续出现文件找不到的问题
    • 在apache容器hosts中添加的172.17.0.1 www.example.com映射,属于完全多余的配置
具体修复步骤
  1. 修正外层443端口的Apache反向代理配置
    移除原来基于域名的反代目标,直接指向本地回环地址,同时添加协议头传递规则:
    <VirtualHost *:443>
            ServerName www.example.com
            ServerAlias example.com
    
            SSLEngine On
            SSLCertificateFile      "/etc/letsencrypt/live/www.example.com/cert.pem"
            SSLCertificateKeyFile   "/etc/letsencrypt/live/www.example.com/privkey.pem"
            SSLCertificateChainFile "/etc/letsencrypt/live/www.example.com/fullchain.pem"
            SSLCACertificatePath    "/etc/ssl/certs"
    
            SSLProxyEngine on
            # 传递原始请求协议标识给后端
            RequestHeader set X-Forwarded-Proto "https"
            RequestHeader set X-Forwarded-Ssl on
            # 直接指向本地WordPress容器映射的8073端口
            ProxyPass / http://127.0.0.1:8073/
            ProxyPassReverse / http://127.0.0.1:8073/
            ProxyRequests Off
    </VirtualHost>
    
  2. 让WordPress信任反向代理的协议头标识
    在WordPress站点根目录的wp-config.php文件中,添加规则让WordPress识别反向代理传递的HTTPS标识,避免触发强制跳转:
    // 插入在wp-config.php中站点URL配置的相邻位置
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
    }
    
  3. 修正WordPress容器内的vhost路径配置
    把DocumentRoot改成和实际挂载路径一致的地址:
    <VirtualHost *:80>
     ServerName www.example.com
     ServerAlias example.com
     ServerAdmin webmaster@localhost
     # 修正为实际的站点文件路径
     DocumentRoot /var/www/www.example.com
    
     <Directory /var/www/www.example.com>
     Options Indexes FollowSymLinks
     AllowOverride All
     </Directory>
    
     ErrorLog /var/log/apache2/example.com.error.log
     CustomLog /var/log/apache2/example.com.access.log combined
    </VirtualHost>
    
  4. 清理冗余配置
    • 从docker-compose.yaml的apache-letsencrypt服务段中,删除完全失效的ports映射配置
    • 从apache-letsencrypt容器的/etc/hosts文件中,删除之前添加的多余域名映射
验证方式

完成所有修改后,重启Apache服务和WordPress容器,清除浏览器本地缓存后重新访问站点,无限重定向的问题就会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 06:24:02