Signalr 用于WebSocket连接的ProxyKit和Querystring
我正在使用ProxyKit作为反向代理。我需要代理http和websocket(signalR)流量,因此我有以下配置。我还需要跨querystring发送,我需要向基本配置添加什么以同时包含querystring,我尝试了以下方法:Signalr 用于WebSocket连接的ProxyKit和Querystring,signalr,reverse-proxy,asp.net-core-2.1,kestrel-http-server,asp.net-core-signalr,Signalr,Reverse Proxy,Asp.net Core 2.1,Kestrel Http Server,Asp.net Core Signalr,我正在使用ProxyKit作为反向代理。我需要代理http和websocket(signalR)流量,因此我有以下配置。我还需要跨querystring发送,我需要向基本配置添加什么以同时包含querystring,我尝试了以下方法: var redirectTo = "https://proxied-server:5002"; var wssredirectTo = "ws://proxied-server:5002"; app.UseWebSockets();
var redirectTo = "https://proxied-server:5002";
var wssredirectTo = "ws://proxied-server:5002";
app.UseWebSockets();
app.UseWebSocketProxy(context => new Uri(wssredirectTo + context.Request.Path.ToString() + context.Request.QueryString.ToString()),
options => options.AddXForwardedHeaders());
app.RunProxy(context =>
{
var finalUrl = redirectTo + context.Request.Path.ToString();
var finalContext = context.ForwardTo(finalUrl);
finalContext.UpstreamRequest.RequestUri = new Uri(finalUrl);
return finalContext
.CopyXForwardedHeaders()
.AddXForwardedHeaders()
.Send();
});
但我仍然只能在代理服务器kestrel日志中看到根url:
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 POST https://proxied-server:5002/signal/satellite/negotiate text/plain; charset=UTF-8 0
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 2.3528ms 200 application/json
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET https://proxied-server:5002/signal/satellite
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 2.3958ms 400 text/plain
您不需要直接将
RequestUri
设置为1,2:
app.RunProxy(上下文=>context
.ForwardTo(重定向到)
.CopyXForwardedHeaders()
.AddXForwardedHeaders()
.Send());
解释
ProxyKit已处理转发到中的上下文.Request.QueryString
:
var uri=new uri(UriHelper.BuildAbsolute(
上游方案,
上游主机,
upstreamHost.PathBase,
context.Request.Path,
context.Request.QueryString);
工具书类
您不需要直接将RequestUri
设置为1,2:
app.RunProxy(上下文=>context
.ForwardTo(重定向到)
.CopyXForwardedHeaders()
.AddXForwardedHeaders()
.Send());
解释
ProxyKit已处理转发到中的上下文.Request.QueryString
:
var uri=new uri(UriHelper.BuildAbsolute(
上游方案,
上游主机,
upstreamHost.PathBase,
context.Request.Path,
context.Request.QueryString);
工具书类
感谢您的回复-我对标准http调用没有任何问题,我的完整uri正在传输。问题在于ws:calls。我需要添加一些东西吗?app.UseWebSocketProxy(context=>newURI(wssredirectTo+context.Request.Path.ToString()+context.Request.QueryString.ToString()),options=>options.AddXForwardedHeaders());感谢您的回复-我对标准http调用没有任何问题,我的完整uri正在传输。问题在于ws:calls。我需要添加一些东西吗?app.UseWebSocketProxy(context=>newURI(wssredirectTo+context.Request.Path.ToString()+context.Request.QueryString.ToString()),options=>options.AddXForwardedHeaders());