ProxyKit и Querystring для подключения через WebSocket - PullRequest
1 голос
/ 26 января 2020

Я использую ProxyKit, чтобы действовать как обратный прокси. Мне нужно прокси http и трафик * websocket (signalR) c, поэтому у меня есть конфигурация ниже. Мне также нужно отправить через строку запроса, что мне нужно добавить в базовую конфигурацию, чтобы также включить строку запроса, я пробовал это:

    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();
    });

Но я все еще вижу только URL root в журнале кестрел прокси сервера:

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

1 Ответ

0 голосов
/ 27 января 2020

Вам не нужно устанавливать RequestUri напрямую 1,2 :

app.RunProxy(context => context
    .ForwardTo(redirectTo)
    .CopyXForwardedHeaders()
    .AddXForwardedHeaders()
    .Send());

Объяснение

ProxyKit уже обрабатывает context.Request.QueryString в ForwardTo 3 :

var uri = new Uri(UriHelper.BuildAbsolute(
    upstreamHost.Scheme,
    upstreamHost.Host,
    upstreamHost.PathBase,
    context.Request.Path,
    context.Request.QueryString));

Ссылки

  1. https://github.com/proxykit/ProxyKit#12 -forward-http-запросы
  2. https://github.com/proxykit/ProxyKit#233 -copying-x-forwarded-headers
  3. https://github.com/proxykit/ProxyKit/blob/4468429f3910111b98d80821fd10824204573053/src/ProxyKit/HttpContextExtensions.cs#L21 -L26
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...