We had the same issue after disabling "sticky" sessions on the scaled-out Azure AppService host. Appeared that SignalR protocol performs first call to negotiate protocol, then second call randomly can be sent to another node. This can be fixed by disabling negotiation on client side. This fix helped us. Please add this point to the ABP SignalR integration documentation because it makes pain for everybody who tries to scaling out the backend with use of custom Redis backplane.
const options = {
skipNegotiation: true,
transport: 1 // WebSockets
};
https://github.com/dotnet/aspnetcore/issues/11678