如何解决这个错误:"无法打开websocket连接:websocket:无法找到带有令牌' upgrade'的连接头"

罗兰杨
2021-01-13 08:51

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

[2017/04/28 12:19:56 UTC] [error] (m.si-fil.com/xray/handlers/ws.WsHandler.ConnectWsServer:29) Could not open websocket connection: websocket: Could not find connection header with token 'upgrade'

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

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

  • 日志消息无法显示

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

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

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

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

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