Docker Compose多Etherpad实例Apache反向代理故障求助
问题排查与解决方案
核心问题定位
从Apache日志的Connection refused: AH00957: http: attempt to connect to 127.0.0.1:9002报错,结合你的Docker Compose配置,最直接的原因是Apache反向代理的后端端口配置错误:
在Docker Compose中,etherpad-moodle和etherpad-redmine容器的内部监听端口都是9001(宿主机映射的9002、9003是对外暴露的端口),但你在Apache配置里错误地用了9002、9003作为容器内部通信的端口,导致Apache无法连接到容器内的服务。
修复步骤
1. 修正Apache反向代理配置
将Apache配置中moodle和redmine对应的代理端口从9002、9003改为容器内部的9001:
# 修正WebSocket重写规则 RewriteRule ^/moodle/socket.io/(.*) ws://etherpad-moodle:9001/socket.io/$1 [P,L] RewriteRule ^/redmine/socket.io/(.*) ws://etherpad-redmine:9001/socket.io/$1 [P,L] # 修正ProxyPass配置 ProxyPass /moodle/ http://etherpad-moodle:9001/ ProxyPassReverse /moodle/ http://etherpad-moodle:9001/ ProxyPass /redmine/ http://etherpad-redmine:9001/ ProxyPassReverse /redmine/ http://etherpad-redmine:9001/
2. 验证容器网络连通性
在apache2-frontal容器内部测试是否能访问另外两个Etherpad容器:
# 进入apache容器 docker exec -it <apache-container-name> bash # 测试连接etherpad-moodle curl http://etherpad-moodle:9001 # 测试连接etherpad-redmine curl http://etherpad-redmine:9001
如果能返回Etherpad的页面内容,说明网络连通正常;如果失败,检查Docker网络配置(确认所有服务都在etherpad网络下)。
3. 检查Etherpad实例的信任代理设置
确保每个Etherpad的settings.json中配置了信任反向代理,避免跨域或路径问题:
"trustProxy": true, "canonicalDomain": "etherpad.mydomaine.com", "canonicalPort": 443, "canonicalProtocol": "https"
4. 重启Apache服务
修正配置后,重启Apache容器使配置生效:
docker-compose restart apache2-frontal
额外排查点
- 确认Apache容器已加载必要模块:
mod_proxy、mod_proxy_http、mod_proxy_wstunnel、mod_rewrite,这些是反向代理WebSocket和HTTP请求的必需模块。 - 检查Etherpad容器的日志,确认服务是否正常启动(
docker-compose logs etherpad-moodle),排除容器内部服务启动失败的可能。
内容的提问来源于stack exchange,提问作者Aurélien Grimpard
相关产品推荐
相关产品推荐

