BunkerWeb集群部署方案:多实例同步与负载均衡配置
随着网站流量增长,单一BunkerWeb实例可能面临性能瓶颈或单点故障风险。本文将详细介绍如何构建BunkerWeb集群,实现多实例配置同步、会话共享与负载均衡,确保Web服务安全与高可用。
集群架构概览
BunkerWeb集群由多个安全网关实例、共享存储与负载均衡层组成。通过集中式配置管理与状态同步,所有节点保持一致的安全策略,同时通过负载均衡分散流量压力。
核心组件
- 负载均衡层:分发客户端请求至BunkerWeb节点,支持健康检查与故障转移
- BunkerWeb节点:运行安全网关服务,应用WAF规则与安全策略
- 共享存储:使用Redis存储会话数据、IP信誉库与临时禁令
- 配置中心:通过Scheduler组件实现配置统一管理与实例同步
官方文档:docs/concepts.md
多实例同步配置
实现BunkerWeb集群的关键在于确保所有节点应用相同的安全策略与配置。通过Scheduler组件与共享存储,可实现配置自动同步与状态共享。
配置同步机制
BunkerWeb提供两种集群配置模式:
- 集中式管理:通过单个Scheduler节点控制多个BunkerWeb实例
- 分布式管理:多Scheduler节点通过数据库实现配置一致性
推荐使用集中式管理模式,架构更简单且易于维护。
环境变量配置
在docker-compose.yml中设置以下关键参数:
bw-scheduler:
environment:
BUNKERWEB_INSTANCES: "bunkerweb1 bunkerweb2 bunkerweb3" # 所有节点主机名/IP
API_WHITELIST_IP: "10.20.30.0/24" # 仅允许管理网段访问API
USE_REDIS: "yes"
REDIS_HOST: "redis"
REDIS_PORT: "6379"
示例配置:examples/load-balancer/docker-compose.yml
会话与状态共享
为确保用户在不同节点间无缝切换,需配置Redis存储会话数据:
bunkerweb:
environment:
USE_REDIS: "yes"
REDIS_HOST: "redis"
SESSIONS_SECRET: "your-shared-secret" # 所有节点必须使用相同密钥
SESSIONS_NAME: "bw-session"
CACHESTORE_MEMORY_SIZE: "128m" # 增加缓存大小适应集群需求
安全注意事项:docs/features.md#sessions
负载均衡配置
负载均衡层负责请求分发与节点健康检查,可使用HAProxy、Nginx或云服务商提供的负载均衡服务。
四层与七层负载均衡选择
- 四层负载均衡:基于IP+端口转发,性能高,适合TCP流量
- 七层负载均衡:基于HTTP/HTTPS内容路由,支持按域名、路径分发
对于Web服务推荐使用七层负载均衡,可结合BunkerWeb的多站点功能实现更精细的流量控制。
HAProxy配置示例
以下配置实现对三个BunkerWeb节点的HTTP/HTTPS负载均衡,并启用健康检查:
frontend http_front
bind *:80
default_backend bunkerweb_nodes
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/
default_backend bunkerweb_nodes
backend bunkerweb_nodes
balance roundrobin
option httpchk GET /health
http-check expect status 200
server bw1 bunkerweb1:8080 check inter 3s fall 2 rise 2
server bw2 bunkerweb2:8080 check inter 3s fall 2 rise 2
server bw3 bunkerweb3:8080 check inter 3s fall 2 rise 2
完整示例:examples/behind-reverse-proxy/haproxy.cfg
真实IP获取
当BunkerWeb部署在负载均衡器后方时,需配置真实IP获取,确保安全规则能正确识别客户端地址:
bunkerweb:
environment:
USE_REAL_IP: "yes"
REAL_IP_FROM: "10.0.0.0/24" # 负载均衡器网段
REAL_IP_HEADER: "X-Forwarded-For"
配置指南:docs/advanced.md#behind-load-balancer-or-reverse-proxy
部署步骤与示例
以下以Docker Compose为例,展示完整的BunkerWeb集群部署流程。
1. 准备环境
确保所有节点已安装Docker与Docker Compose,并配置时间同步与网络互通。
2. 创建docker-compose.yml
version: '3.8'
services:
# 负载均衡器
haproxy:
image: haproxy:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
- ./certs:/etc/haproxy/certs
depends_on:
- bunkerweb1
- bunkerweb2
# BunkerWeb节点1
bunkerweb1:
image: bunkerity/bunkerweb:1.6.4
environment:
- SERVER_NAME=www.example.com
- MULTISITE=yes
- USE_REDIS=yes
- REDIS_HOST=redis
- SESSIONS_SECRET=my-secret-key
- API_WHITELIST_IP=10.20.30.0/24
depends_on:
- redis
# BunkerWeb节点2
bunkerweb2:
image: bunkerity/bunkerweb:1.6.4
environment:
- SERVER_NAME=www.example.com
- MULTISITE=yes
- USE_REDIS=yes
- REDIS_HOST=redis
- SESSIONS_SECRET=my-secret-key
- API_WHITELIST_IP=10.20.30.0/24
depends_on:
- redis
# 配置管理节点
scheduler:
image: bunkerity/bunkerweb-scheduler:1.6.4
environment:
- BUNKERWEB_INSTANCES=bunkerweb1 bunkerweb2
- API_WHITELIST_IP=10.20.30.0/24
- SERVER_NAME=www.example.com
- AUTO_LETS_ENCRYPT=yes
volumes:
- bw-data:/data
# 共享Redis存储
redis:
image: redis:alpine
volumes:
- redis-data:/data
volumes:
bw-data:
redis-data:
示例文件:examples/load-balancer/docker-compose.yml
3. 启动集群
# 克隆仓库获取示例配置
git clone https://gitcode.com/GitHub_Trending/bu/bunkerweb
cd bunkerweb/examples/load-balancer
# 启动服务
docker-compose up -d
# 检查节点状态
docker-compose ps
4. 验证集群状态
通过Web UI或API确认所有节点已成功加入集群并同步配置:
# 查看Scheduler日志
docker-compose logs -f scheduler
# 检查节点健康状态
curl http://localhost/health
Web UI访问:docs/web-ui.md
性能优化与最佳实践
资源分配建议
- CPU:每节点至少2核,处理WAF规则与请求过滤
- 内存:根据并发连接数调整,建议每节点4GB+
- 存储:日志与缓存使用SSD,提高I/O性能
扩展性设计
- 水平扩展:通过增加BunkerWeb节点提升处理能力
- 分层部署:分离静态资源与动态请求处理
- 地理分布式:结合全球负载均衡实现就近访问
监控与维护
- 健康检查:配置负载均衡器定期检查
/health端点 - 日志集中:使用ELK栈或Graylog收集所有节点日志
- 性能监控:通过Prometheus+Grafana监控关键指标
官方维护指南:docs/troubleshooting.md
常见问题解决方案
配置同步延迟
问题:新配置应用后部分节点未及时更新
解决:
- 检查Scheduler日志确认配置推送状态
- 验证节点间网络连通性(5000端口API访问)
- 手动触发同步:
docker-compose exec scheduler bwcli config push
会话不一致
问题:用户在节点间切换时需要重新验证
解决:
- 确保所有节点使用相同的
SESSIONS_SECRET - 验证Redis连接与数据持久化配置
- 检查防火墙是否阻止Redis端口通信
负载不均衡
问题:请求集中在部分节点
解决:
- 调整负载均衡算法(如最小连接数)
- 检查节点健康检查配置
- 验证会话粘性设置是否合理
总结
通过BunkerWeb集群部署,可构建高可用、可扩展的Web应用安全防护体系。集中式配置管理确保所有节点策略一致,而负载均衡与状态共享实现了无缝扩展。结合本文提供的部署步骤与最佳实践,您可以为Web服务构建企业级安全网关集群,在保障安全性的同时满足业务增长需求。
进阶阅读:docs/advanced.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



