Cyberpanel 上托管的 Asp Net SignalR 出现错误

问题描述 投票:0回答:3

我正在创建一个农场管理网站。我正在 CyberPanel 上运行 Asp Net Web API。我是按照这篇文章完成的:在 CyberPanel / Linux 上发布并运行 ASP.Net – Viov 的博客

问题是我正在使用一种名为 SignalR 的技术。 SignalR 基本上是一个顶级抽象层,用于简化 Web 套接字(它还包括其他功能,但现在不重要了)。开发环境中的一切都按预期进行,但是当我部署应用程序并在 Cyberpanel 上托管 Asp Net 时,Web 套接字停止工作。

Cyberpanel 错误日志打印此:

[2023-05-24 09:26:32.085918 [信息] [18351] [187.74.137.142:46278#api.milksolve.com.br] 找不到 Web 套接字后端。 URI:[/fazendahub]

客户端说Websocket没有发送握手,所以Websocket肯定没有工作。我检查了访问日志,确认 Signalr 协议在 Web 套接字连接上中断。大家有解决办法吗

编辑:

经过一番研究,我发现这个问题与 虚拟主机反向代理。 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

asp.net websocket signalr cyber-panel
3个回答
1
投票

本文的作者,有趣的是,您通过我的文章节省了时间,而我通过使用您的文章节省了时间:D 我将用 SignalR 和 Blazor 部分更新我的文章。只是为了确保您在执行 RewriteRule 时可以确认名称 [EXTERNAL SERVER] 始终位于 [] 内。

所以它

RewriteRule /(.*) ws://[服务器名称]/$1 [P,L]

不是

RewriteRule /(.*) ws://服务器名称/$1 [P,L]

谢谢!

PS: 很快我将在我的博客上发布一篇关于在 CyberPanel 上直接与 Github 同步 ASP 项目的文章。不再受 Visual Studio 的发布部分的困扰,并为每次更改执行“sudo systemctl restart example.service”。


0
投票

经过几天的痛苦,我找到了自己的解决方案。首先是按照本文所述设置反向代理:在 CyberPanel / Linux 上发布并运行 ASP.Net – Viov 的博客

之后,您将代理上下文更改为:

这里唯一的区别是您需要在标题操作上添加此行:

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

更改此设置后,您将需要创建一个 WebSocket 代理。 OpenLiteSpeed 有自己的选项卡:

这里只需要创建一个WebSocket Proxy即可,但是有两点很重要:

  1. URI 需要是斜杠:/
  2. 地址必须是 localhost:port。仅当您更改 launchsettings.json 文件时它才会更改。默认情况下是 localhost:5000

创建后,您将需要添加一些重写规则,如果您使用 CyberPanel,则应在其网站管理区域中完成。如果不这样做,您只需要转到 OpenLiteSpeed 上的重写区域(我将在 Cyberpanel 上显示)。

重写规则应该是这样的:

RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*)           ws://[External App Name]/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*)           http://[External App Name]/$1 [P,L]

*重要*

您将 [外部应用程序名称] 更改为在创建反向代理期间定义的外部应用程序名称,要查看该名称,您将转到 OpenLiteSpeed 上的此屏幕:

在这里您可以看到外部应用程序的名称。完成所有这些后,您应该刷新 OpenLiteSpeed 并重新启动您的 Asp Net 服务。这应该可以解决你的问题


0
投票

我也有同样的问题。我花了两天时间修复它,我希望我早点发现你的问题。解决方案是在 OpenLiteSpeed -> Virtual Hosts 中设置 Web Socket 代理。

我在这里发布了解决方案:https://forum.openlitespeed.org/threads/how-to-setup-an-asp-net-core-website.4940/page-2#post-15081

但我有一个问题。我正在使用 ASP.NET 代码来设置 X-Forwarded-Proto:

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

我还没有按照你的建议在 OpenLiteSpeed 中设置它:

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

它正在工作,我想知道我是否需要在 OpenLiteSpeed 的标头中设置 X-Forwarded-Proto

© www.soinside.com 2019 - 2024. All rights reserved.