C# 使用服务结构的Owin基于主机名的站点

C# 使用服务结构的Owin基于主机名的站点,c#,azure,owin,azure-service-fabric,self-hosting,C#,Azure,Owin,Azure Service Fabric,Self Hosting,我在使用ServiceFabric和OWIN在不同的子域上托管多个网站时遇到问题 假设我的服务结构云上有四台HTTP(s)服务器。它们都在不同的端口上运行。因此,在初始化的某个时刻,它们将分别调用: Microsoft.Owin.Hosting.WebApp.Start(“http://+:80/”,UnsecureStartup) Microsoft.Owin.Hosting.WebApp.Start(“https://+:443/”,MainStartup) Microsoft.Owin.H

我在使用ServiceFabric和OWIN在不同的子域上托管多个网站时遇到问题

假设我的服务结构云上有四台HTTP(s)服务器。它们都在不同的端口上运行。因此,在初始化的某个时刻,它们将分别调用:

  • Microsoft.Owin.Hosting.WebApp.Start(“http://+:80/”,UnsecureStartup)
  • Microsoft.Owin.Hosting.WebApp.Start(“https://+:443/”,MainStartup)
  • Microsoft.Owin.Hosting.WebApp.Start(“https://+:4431/”,ApiStartup)
  • Microsoft.Owin.Hosting.WebApp.Start(“https://+:4432/”,额外启动)
  • 这一切都很好。所有请求都已成功满足。所有四个端口都为在各自的无状态服务中分配给它们的初创公司提供服务,HTTPS端口以适当的服务结构方式使用从
    ServiceManifest.xml
    设置的相同证书

    我们一直计划使用子域而不是不同的端口。现在我们有了自己的域名,我们正努力做到以下几点:

  • Microsoft.Owin.Hosting.WebApp.Start(“http://example.com:80/“,未经批准的启动)
  • Microsoft.Owin.Hosting.WebApp.Start(“https://example.com:443/",中流砥柱",
  • Microsoft.Owin.Hosting.WebApp.Start(“https://api.example.com:443/",
  • Microsoft.Owin.Hosting.WebApp.Start(“https://extras.example.com:443/“,额外启动)
  • 上面的代码确实可以运行。所有四个无状态服务在ServiceFabricExplorer中启动并变为绿色。然而,每个请求(到http:80和到https:445)都会得到相同的响应:

    服务不可用 HTTP错误503。服务不可用

    如果我无法根据主机名选择一个Owin服务器,为什么Service Fabric允许我们拥有多个Owin服务器,即使在同一端口上?有人知道我们如何才能做到这一点吗


    非常感谢您提供的任何帮助。

    据我所知,主机名与SF不太兼容。 在我看来,您有以下选项:

    1) 您在内部服务上使用不同的端口,并在SF集群前面放置一个WAF,让该WAF处理SSL卸载、URL路由和内部端口的本地。这样,您将只需要1个公共IP

    2) 您可以添加更多的公共IP,并让您的公共负载平衡来处理它。你需要3个IP地址,但是因为前5个IP在azure中是免费的,所以这不会花费你任何额外的费用


    您可能希望使用选项1,因为它可以让您更轻松地管理证书、更好的安全性和更大的灵活性,但代价是美元。

    谢谢您的解决方案。我仍然对主机名问题感到困惑。它发生在SSL和不安全的HTTP中,所以SSL不是这里的问题。你看过这个答案了吗@它确实解决了HTTP的问题,但没有解决HTTPS的问题,这是我的一个要求。无论如何,谢谢你。