gpt4 book ai didi

azure - 在服务结构上托管多个公共(public)站点

转载 作者:行者123 更新时间:2023-12-04 06:33:10 26 4
gpt4 key购买 nike

我部署了一个服务结构集群,域​​为 foo.northcentralus.cloudapp.azure.com

它具有单一节点类型和单一公共(public) IP 地址/负载均衡器。

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

如何设置才能拥有多个域,每个域托管在端口 80 上? (假设我显然拥有这两个域)

我的集群中是否需要多个公共(public) IP 地址来支持这一点?

最佳答案

您应该能够通过一些 http.sys 魔法使用单个公共(public) IP 地址来完成此操作。

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

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

底层Windows HTTP Server API将使用该 URL 注册该服务器,并且带有 Host: Visualobjects.com header 的任何 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,默认情况下为 Network Service:

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>

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

关于azure - 在服务结构上托管多个公共(public)站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com