Azure Service Fabric中ASP.NET Core 2站点80端口共享及主机名配置咨询
没问题,Azure Service Fabric完全支持通过主机名(Host Header)区分多个共享80端口的ASP.NET Core网站,这也是这类场景下最清晰、最常用的方案。下面我给你一步步拆解具体配置步骤:
一、先给ASP.NET Core应用做好基础配置
你的ASP.NET Core 2应用需要能接收所有发往80端口的请求,不要绑定到特定主机名。在Program.cs里调整BuildWebHost方法:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://*:80") // 监听所有IP的80端口,让Service Fabric来处理路由分发 .Build();
也可以在appsettings.json里配置Urls字段,效果是一样的:
{ "Urls": "http://*:80" }
这一步的核心是让应用不限制请求的主机名,把路由判断交给Service Fabric处理。
二、配置Service Fabric的Manifest文件(核心步骤)
这部分要分别修改每个服务的ServiceManifest.xml和应用级的ApplicationManifest.xml:
1. 服务级Manifest(ServiceManifest.xml)
在每个网站服务的<Resources>节点下,定义一个80端口的HTTP端点:
<Resources> <Endpoints> <!-- 每个服务的端点名称可以不同,但Port都设为80 --> <Endpoint Name="WebSite1Endpoint" Protocol="http" Port="80" Type="Input" /> </Endpoints> </Resources>
第二个网站服务的Endpoint配置类似,只是名称可以改成WebSite2Endpoint,Port保持80不变。
2. 应用级Manifest(ApplicationManifest.xml)
这里要做两件事:配置端口共享策略和主机头绑定规则,让Service Fabric知道如何根据主机名转发请求:
<ApplicationManifest ...> <Services> <!-- 第一个网站服务配置 --> <Service Name="WebSite1" ServicePackageActivationMode="ExclusiveProcess"> <StatelessService ServiceTypeName="WebSite1Type" InstanceCount="1"> <SingletonPartition /> </StatelessService> <!-- 绑定主机名到该服务的端点 --> <EndpointBindings> <EndpointBinding EndpointRef="WebSite1Endpoint" Hostname="site1.yourdomain.com" /> </EndpointBindings> </Service> <!-- 第二个网站服务配置 --> <Service Name="WebSite2" ServicePackageActivationMode="ExclusiveProcess"> <StatelessService ServiceTypeName="WebSite2Type" InstanceCount="1"> <SingletonPartition /> </StatelessService> <EndpointBindings> <EndpointBinding EndpointRef="WebSite2Endpoint" Hostname="site2.yourdomain.com" /> </EndpointBindings> </Service> </Services> <!-- 启用80端口的共享策略 --> <Policies> <PortSharingPolicy EndpointRef="WebSite1Endpoint" /> <PortSharingPolicy EndpointRef="WebSite2Endpoint" /> </Policies> </ApplicationManifest>
这里几个关键注意点:
ServicePackageActivationMode="ExclusiveProcess":确保每个网站服务运行在独立进程,避免进程级的端口冲突(Service Fabric会通过网关层做请求转发,实现端口共享)EndpointBinding里的Hostname就是你要指定的自定义域名,把它绑定到对应服务的端点PortSharingPolicy要引用每个服务的80端口端点,告诉Service Fabric这些端口需要启用共享机制
三、最后验证配置
部署应用后,记得把你的两个主机名(site1.yourdomain.com和site2.yourdomain.com)通过DNS解析指向Service Fabric集群的公共IP或者负载均衡器IP。同时要确保Azure Load Balancer的入站规则已经打开80端口,允许外部流量访问。
之后访问两个主机名,就能分别打开对应的ASP.NET Core网站了。
内容的提问来源于stack exchange,提问作者kumar

