我正在创建一个农场管理网站。我在CyberPanel上运行一个ASP Net Web API。我是按照这篇文章做的:Publish & Run ASP.Net on CyberPanel / Linux – Blog of Viov
问题是我用的是一种叫SignalR的技术。SignalR基本上是一个顶级抽象层,用于简化Web Socket(它还包括其他功能,但现在不重要)。在开发环境中,一切都按预期进行,但当我在Cyberpanel上部署应用程序并托管AspNet时,Web Socket停止工作。
Cyberpanel错误日志将打印以下内容:
[2023-05-24 09:26:32.085918 [INFO] [18351] [187.74.137.142:46278#api.milksolve.com.br]找不到Web Socket后端。URI:[/fazendahub]
客户端说WebSocket没有发送握手,所以Websocket肯定没有工作。我检查了访问日志,在那里我确认了Signalr协议在Web Socket连接上中断。有人有解决办法吗?
编辑:
经过一些研究,我发现这个问题与虚拟主机反向代理有关。CyberPanel使用OpenLiteSpeed,我在互联网上找到的唯一解决方案是Ngix和Apache。
我的重写文件:
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /(.*) ws://127.0.0.1:5000/$1 [P]
不支持WebSocket
1条答案
按热度按时间5jvtdoz21#
经过几天的痛苦,我找到了自己的解决办法。第一件事是设置一个反向代理,如本文所述:Publish & Run ASP.Net on CyberPanel / Linux – Blog of Viov
之后,您将代理上下文更改为:
这里唯一的区别是您需要在标题操作中添加此行:
更改后,您将需要创建一个WebSocket代理。OpenLiteSpeed有自己的标签:
在这里,你只需要创建一个WebSocket代理,但有两件重要的事情:
1.地址必须为localhost:port。只有当您更改了launchsettings.json文件时,它才会更改。默认为localhost:5000
创建后,您将需要添加一些重写规则,如果您使用CyberPanel,这应该在其网站管理区域完成。如果你没有,你只需要去OpenLiteSpeed上的重写区域(我会在Cyberpanel上展示)。
重写规则应该是这样的:
重要
您可以将[External App Name]更改为在反向代理创建期间定义的外部应用程序名称,以查看您将在OpenLiteSpeed上转到此屏幕的名称:
在这里,您可以看到外部应用程序的名称。完成所有这些之后,您应该刷新OpenLiteSpeed并重新启动Asp Net Service。这应该能解决你的问题