GitLab Web IDE连接失败:WebSocket错误码1006求助
排查GitLab Web IDE连接Ubuntu VPS的WebSocket 1006错误
问题描述
尝试将Ubuntu VPS连接至GitLab Web IDE时,遇到错误:The workbench failed to connect to the server (Error: WebSocket close with status code 1006)
已完成的配置操作:
- Nginx配置如下:
server { server_name remote.demo.com; location / { proxy_pass http://localhost:3443; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Accept-Encoding gzip; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; } }
- Cloudflare已启用Websockets功能
- 已完成GitLab官方远程开发的证书生成步骤
排查与解决步骤
1. 验证VPS本地WebSocket服务可用性
先绕过Nginx和Cloudflare,直接测试VPS本地3443端口的WebSocket服务是否正常:
# 安装websocket客户端工具 sudo apt install -y wscat # 连接本地服务 wscat -c ws://localhost:3443
如果连接失败,说明GitLab远程开发服务本身未正常启动,检查服务状态:
# GitLab Omnibus部署方式 sudo gitlab-ctl status # Docker部署方式(替换容器名) docker logs <gitlab-remote-dev-container-name>
2. 完善Nginx的WebSocket代理配置
现有配置缺少WebSocket超时与缓存控制设置,容易导致连接被主动断开,补充以下内容到location /块中:
# 延长WebSocket连接超时时间 proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; # 禁用WebSocket请求的缓存 proxy_cache_bypass $http_upgrade; proxy_no_cache $http_upgrade;
修改后重启Nginx:
sudo nginx -t && sudo systemctl reload nginx
3. 检查Cloudflare的拦截规则
即使启用了Websockets,Cloudflare的部分功能可能阻断连接:
- 若域名使用Cloudflare代理模式,暂时切换为DNS only测试是否恢复连接
- 禁用"Bot Fight Mode"或"Super Bot Fight Mode",这类功能可能误拦截WebSocket请求
- 检查"防火墙规则"是否存在针对WebSocket的拦截策略
- 确认SSL/TLS模式设置为Full或Full (strict),避免证书不匹配导致连接中断
4. 确认端口与防火墙设置
- 开放VPS本地防火墙的3443端口:
sudo ufw allow 3443/tcp
- 若使用Cloudflare代理自定义端口,需在Cloudflare后台"网络"->"端口规则"中添加对应端口的放行规则
5. 补全Nginx SSL配置
GitLab Web IDE要求HTTPS连接,现有配置未包含SSL部分,补充证书加载与HTTPS监听配置:
server { listen 443 ssl; server_name remote.demo.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://localhost:3443; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Accept-Encoding gzip; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; # 新增超时与缓存控制 proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; proxy_cache_bypass $http_upgrade; proxy_no_cache $http_upgrade; } } # HTTP重定向到HTTPS server { listen 80; server_name remote.demo.com; return 301 https://$host$request_uri; }
修改后验证配置并重启Nginx:
sudo nginx -t sudo systemctl reload nginx
内容的提问来源于stack exchange,提问作者Fabian Dev
相关产品推荐
相关产品推荐

