重定向内部网络中的外部http连接

时间:2019-11-13 15:29:15

标签: c# asp.net-mvc nginx asp.net-core nginx-reverse-proxy

网络结构
enter image description here

当用户从Internet连接时,他总是被转发到容器A。

所有容器都包含asp.net核心mvc应用程序。

问题
我希望基于容器A内发生的决定,能够将客户端重定向到容器B或容器C。这些容器在未发布到互联网的端口5001和5002上运行。

我尝试过的事情

  • asp.net Redirect函数的不同组合
  • nginx上层和代理功能(主要用于this之类的设置中)

我试图为asp.net核心找到一些传递功能,但找不到任何功能。

1 个答案:

答案 0 :(得分:0)

1)如果所有服务都具有相同的主机名和方案(http / https),请使用相对路径

2)如果否,请配置nginx反向代理,以提供以下标头的代理应用程序:

   proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header    X-Forwarded-Proto $scheme;
   Host $host:$server_port

在asp应用程序中配置UseForwardedHeaders

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        options.KnownNetworks.Clear();
        options.KnownProxies.Clear();
    });
    ....
    app.UseForwardedHeaders();

它将使用由客户端发出的初始请求填充Request.Scheme和Request.Host。 使用此信息重定向

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1