Appearance
生产环境部署指南 (Deployment)
在生产环境中部署 WebSocket 服务,我们需要关注安全性、稳定性和性能。以下是基于 Nginx 和 Supervisor 的标准部署方案。
1. 基础设施要求
- Redis: 用于多节点间的消息同步(集群模式必须)。
- Nginx: 充当 SSL 终结和反向代理。
- Supervisor / Systemd: 用于进程守护。
2. 进程管理 (Supervisor)
使用 Supervisor 确保 WebSocket 服务进程在后台持续运行。
创建配置文件 /etc/supervisor/conf.d/websocket.conf:
```ini [program:websocket-server] process_name=%(program_name)s
替换为你的实际启动命令,例如 ./server 或 php artisan reverb:start
command=/path/to/your/websocket-server --port=8080 autostart=true autorestart=true user=www-data
建议将日志重定向到单独的文件
stderr_logfile=/var/log/websocket.err.log stdout_logfile=/var/log/websocket.out.log
增加打开文件描述符的限制,这对高并发 WebSocket 服务至关重要
minfds=10000 ```
应用配置:
```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start websocket-server ```
3. Nginx 反向代理配置
为了支持 wss:// (SSL/TLS) 并隐藏服务的内部端口,我们需要配置 Nginx 作为反向代理。
```nginx server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ws.example.com; # 你的 WebSocket 域名
# SSL 证书配置 (建议使用 Let's Encrypt / Certbot 自动生成)
ssl_certificate /etc/letsencrypt/live/ws.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ws.example.com/privkey.pem;
# 推荐的 SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 转发到本地 WebSocket 服务端口 (默认 8080)
proxy_pass http://127.0.0.1:8080;
# WebSocket 必须的头部
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
# 传递真实 IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
# 增加读取超时时间,防止长连接被 Nginx 切断
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
} ```
4. 端口调优 (Linux Kernel)
对于高并发场景(超过 10k 连接),可能需要调整内核参数以允许更多打开的文件和端口。
编辑 /etc/sysctl.conf:
```bash fs.file-max = 100000 net.ipv4.ip_local_port_range = 1024 65535 net.core.somaxconn = 65535 ```
应用更改:sudo sysctl -p