求助:阿里云CLB无法对Passbolt Docker容器执行健康检查
Passbolt容器经阿里云CLB转发无法访问排查方案
环境梳理
- 网络链路:Cloudflare托管域名 → 阿里云经典CLB → 运行多Docker容器的ECS实例
- 正常服务:Portainer、Bookstack、Grafana(均配置HTTP端口,CLB转发正常)
- 异常服务:Passbolt,CLB健康检查失败,禁用健康检查后页面仍无法加载
- 已尝试操作:
- 直接通过IP+HTTP端口连接Passbolt实例
- 使用
curl调用IP+HTTP端口 - 不暴露Passbolt容器HTTPS端口
- 禁用CLB健康检查
- 修改容器暴露端口为8088等其他端口
- 初步推测:自签名证书干扰、Passbolt配置问题
针对性排查与解决步骤
1. 关闭Passbolt的HTTPS强制跳转
Passbolt默认会强制HTTPS访问,即使配置了HTTP端口转发,也会触发301/302重定向,导致CLB健康检查失败、页面无法加载。
- 进入Passbolt容器编辑配置文件:
docker exec -it <你的Passbolt容器名> vi /etc/passbolt/passbolt.php - 找到
force_ssl配置项,将值改为false:'force_ssl' => false, - 重启容器生效:
docker restart <你的Passbolt容器名> - 用
curl测试ECS内网IP+端口,确认返回正常页面而非重定向:curl http://<ECS内网IP>:<暴露端口>
2. 修正Passbolt的站点URL配置
Passbolt的fullBaseUrl必须与外部访问的子域名一致,否则会出现路由异常:
- 同样在
passbolt.php中找到fullBaseUrl,设置为CLB转发对应的子域名(如果Cloudflare启用了HTTPS,这里填HTTPS地址;如果CLB到ECS走HTTP,填HTTP地址):'fullBaseUrl' => 'http://passbolt.yourdomain.com', - 重启容器后再次测试。
3. 检查容器端口监听与映射
- 确认容器内HTTP端口(默认80)正常监听:
docker exec <你的Passbolt容器名> netstat -tulpn | grep 80 - 检查Docker端口映射规则,确保宿主机端口与容器内80端口正确绑定:
输出应类似docker ps | grep passbolt0.0.0.0:8080->80/tcp,确认宿主机端口与CLB转发规则一致。
4. 调整CLB健康检查配置
- Passbolt有官方健康检查端点,将CLB健康检查路径改为
/healthcheck/status.json,而非默认的/ - 确保健康检查请求头添加
Host字段,值为Passbolt对应的子域名(Passbolt依赖Host头识别站点)
5. 清理容器内HTTPS重定向配置
如果之前生成过自签名证书,容器内的Nginx可能残留HTTPS强制配置:
- 进入容器查看Nginx配置:
docker exec <你的Passbolt容器名> vi /etc/nginx/sites-available/passbolt.conf - 注释掉以下HTTPS重定向代码块:
# if ($scheme != "https") { # return 301 https://$host$request_uri; # } - 重启容器内的Nginx:
docker exec <你的Passbolt容器名> service nginx restart
6. 验证ECS安全组与防火墙
- 确认ECS安全组允许CLB内网IP段访问Passbolt的暴露端口
- 检查ECS本地防火墙(iptables/firewalld),确保未拦截该端口的入站请求
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

