如何解决错误:“无法打开websocket连接:websocket:无法找到连接头与令牌‘升级’”

罗兰杨
2023-01-22 11:05

中可能会看到以下错误消息xray_server.log

[2017/04/28 12:19:56 UTC] [error] (www.si-fil.com/xray/handlers/ws.WsHandler.ConnectWsServer:29)无法打开websocket连接:websocket:无法找到连接头与令牌'upgrade'

虽然这不会影响Xray操作的后端,但您可能会遇到以下情况问题x光UI

  • JFrog Xray数据库的下载进度条没有更新(例如,进度条停留在1%,即使它在后端完成)

  • 日志消息无法显示

当反向代理或负载均衡器没有正确地传递WebSocket请求时,就会出现这个问题。以下说明将帮助您解决此问题:

Nginx的:
为NGINX添加以下设置:proxy_http_version 1.1;
升级$http_upgrade;
proxy_set_header连接升级

对于Apache HTTPD:
为Apache HTTPD添加以下设置:
RewriteEngine上ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/

## UI和日志
RewriteCond %{HTTP:Upgrade} =websocket [NC]
重写%{HTTP:Connection}升级[NC]
RewriteRule /(.*) ws://localhost:8000/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:8000/$1 [P,L]

对于AWS ELB的经典负载均衡器:
该问题将是由于经典负载均衡器的HTTP协议不传递WebSocket请求。作为一个解决方案,您可以使用TCP协议。或者,你也可以使用亚马逊的应用程序负载均衡器它支持WebSocket。