使用BunkerWeb实现WebSocket反向代理的Docker Compose配置解析
在现代Web应用开发中,WebSocket协议因其全双工通信能力而广受欢迎。本文将深入解析如何利用BunkerWeb项目搭建一个支持WebSocket反向代理的安全Web服务架构。
架构概述
这个Docker Compose配置定义了一个完整的Web服务架构,包含三个核心组件:
- BunkerWeb:作为前端Web服务器和安全网关
- BunkerWeb Scheduler:负责配置管理和自动证书申请
- WebSocket测试服务:提供WebSocket功能的后端服务
核心组件详解
BunkerWeb服务配置
bunkerweb:
image: bunkerity/bunkerweb:1.6.0
ports:
- "80:8080/tcp"
- "443:8443/tcp"
- "443:8443/udp" # 支持QUIC协议
environment:
API_WHITELIST_IP: "127.0.0.0/8 10.20.30.0/24"
关键点解析:
- 同时监听TCP和UDP的443端口,支持QUIC协议(HTTP/3)
- API访问限制在本地回环和10.20.30.0/24子网
- 端口映射将容器内部的8080/8443映射到主机的80/443
Scheduler服务配置
bw-scheduler:
image: bunkerity/bunkerweb-scheduler:1.6.0
environment:
SERVER_NAME: "www.example.com"
AUTO_LETS_ENCRYPT: "yes"
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_URL: "/ws/"
REVERSE_PROXY_HOST: "http://myws:8010"
REVERSE_PROXY_WS: "yes"
核心功能说明:
AUTO_LETS_ENCRYPT
启用自动Let's Encrypt证书申请USE_REVERSE_PROXY
启用反向代理功能REVERSE_PROXY_WS
特别声明代理WebSocket连接- 所有访问
/ws/
路径的请求将被转发到后端WebSocket服务
WebSocket测试服务
myws:
image: ksdn117/web-socket-test
这是一个简单的WebSocket测试服务,实际生产环境中可替换为任何兼容的WebSocket服务。
网络设计
配置中定义了两个专用网络:
-
bw-universe网络:
- 子网:10.20.30.0/24
- 连接BunkerWeb和Scheduler
- 用于管理通信
-
bw-services网络:
- 连接BunkerWeb和后端服务
- 隔离业务流量
这种网络隔离设计增强了安全性,确保管理流量和业务流量分离。
安全特性
- IP白名单:限制API访问来源
- 自动HTTPS:通过Let's Encrypt自动获取证书
- 默认服务器禁用:减少攻击面
- 性能优化:
- 启用客户端缓存(
USE_CLIENT_CACHE
) - 启用Gzip压缩(
USE_GZIP
)
- 启用客户端缓存(
实际应用建议
- 域名配置:将
www.example.com
替换为实际域名 - 证书配置:确保DNS解析正确指向服务器IP以完成证书申请
- WebSocket路径:根据实际需求调整
/ws/
路径 - 后端服务:替换
myws
为实际WebSocket服务
总结
这个配置展示了BunkerWeb作为反向代理处理WebSocket连接的能力,同时提供了企业级的安全特性和性能优化。通过合理的网络隔离和环境变量配置,可以快速搭建一个安全、高效的WebSocket服务架构。
对于生产环境,建议进一步配置:
- 详细的访问日志
- 速率限制
- 更精细的IP访问控制
- 监控和告警机制
这种架构特别适合需要实时通信的Web应用,如在线聊天、实时协作工具或金融行情推送等场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考