在服务结构上托管多个公共站点

时间:2016-08-01 13:48:00

标签: azure dns azure-service-fabric

我部署了一个域foo.northcentralus.cloudapp.azure.com

的服务架构集群

它具有单个节点类型,具有单个公共IP地址/负载均衡器。

假设我已部署以下两个应用程序:

如何设置它以便我可以在端口80上托管多个域? (假设我显然拥有这两个域名)

我的群集中是否需要多个公共IP地址才能支持此功能?

2 个答案:

答案 0 :(得分:11)

您应该可以通过一些http.sys魔法使用单个公共IP地址执行此操作。

假设您使用Katana作为您的网络主机(您引用的字数和可视对象样本使用Katana),那么它应该就像使用域中的域名启动服务器一样简单网址:

WebApp.Start("http://visualobjects.com:80", appBuilder => this.startup.Invoke(appBuilder));

底层Windows HTTP Server API将使用该URL注册该服务器,并且带有Host: visualobjects.com标头的任何HTTP请求将自动路由到该服务器。对具有自己主机名的任意数量的服务器重复此操作。这是http.sys在单台机器上为多网站托管所做的主机路由,与IIS中的相同。

您将遇到的问题是保留主机名,在打开服务器之前,必须在提升的用户帐户下执行此操作。 Service Fabric在ServiceManifest.xml中以端点配置的形式对此提供了有限的支持:

<!-- THIS WON'T WORK FOR REGISTERING HOSTNAMES -->
<Resources>
  <Endpoints>
    <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="80" />
  </Endpoints>
</Resources>

此处的限制是无处指定主机名,因此Service Fabric将始终注册“http://+:[port]”。遗憾的是,如果要在特定主机名上打开服务器,则无法使用 - 您只需要注册要使用的主机名。您必须使用netsh手动执行该部分(并从ServiceManifest.xml中删除相同端口的任何端点,否则它将覆盖您的主机名注册)。

要手动向http.sys注册主机名,您必须为运行服务的主机名,端口和用户帐户运行netsh,默认情况下为网络服务:

netsh http add urlacl url=http://visualobjects.com:80/ user="NT AUTHORITY\NETWORK SERVICE"

但是你必须在服务运行的每台机器上的提升帐户中执行此操作。幸运的是,我们有service setup entry points that can run under elevated account privileges

修改

要使其正常工作,您需要做的一件事是在您正在侦听的同一端口上打开防火墙。您可以使用以下内容执行此操作:

<Resources>
   <Endpoints>
      <Endpoint Protocol="tcp" Name="ServiceEndpoint" Type="Input" Port="80" />
   </Endpoints>
</Resources>

请注意,协议是tcp而不是http。这将打开防火墙端口,但不会覆盖您使用.bat脚本设置的http.sys注册。

答案 1 :(得分:0)

我相信。然后可以设置单独的公共IP,以允许从这些IP路由到相同的后端池,但是在不同的端口上。