如何为以Windows服务托管的ASP.NET Core应用配置负载均衡
ASP.NET Core Windows服务绑定通用地址实现DNS负载均衡配置方案
1. 调整应用监听配置(两种方案二选一即可)
方案A:通过配置文件设置(无需修改代码,推荐)
在应用的appsettings.json中添加Kestrel节点配置,让服务监听服务器所有可用IP的对应端口,不要绑定固定IP:
{ "Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:80" }, // 如需HTTPS则保留下方配置,替换证书信息即可 "Https": { "Url": "https://0.0.0.0:443", "Certificate": { "Path": "你的域名证书.pfx", "Password": "证书密码" } } } } }
方案B:通过代码配置
在Program.cs中添加Kestrel监听逻辑:
var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听所有IP的指定端口 builder.WebHost.ConfigureKestrel(opt => { // 监听HTTP 80端口 opt.ListenAnyIP(80); // 监听HTTPS 443端口 // opt.ListenAnyIP(443, o => o.UseHttps("你的域名证书.pfx", "证书密码")); }); // 余下原有服务注册、中间件配置逻辑保持不变 var app = builder.Build(); // ... app.Run();
2. 重新发布并安装Windows服务
将修改后的应用重新发布到两台服务器,执行服务安装命令时如果指定了--urls参数,也要对应修改为监听所有IP的格式:sc create 你的服务名称 binPath= "你的应用程序路径\App.exe --urls http://0.0.0.0:80" start= auto
注意:Windows系统sc命令中
binPath=后必须保留一个空格,否则命令执行失败。
服务启动后可以执行netstat -ano | findstr :你的端口号验证监听地址是否为0.0.0.0:端口,确认配置生效。
3. DNS负载均衡配置
在你的DNS解析服务商/自建DNS服务器上,给需要统一访问的域名添加两条A记录,分别指向两台服务器的IP地址,可将TTL设置为300秒方便后续调整。
常见注意事项
- 两台服务器都需要部署同一张对应域名的HTTPS证书,避免访问时出现证书不受信任的错误。
- 两台服务器的防火墙都要放行对应端口的入站访问规则。
- 如果应用有会话状态,建议将状态存储到分布式缓存(如Redis)中,或在DNS层配置会话粘性,避免跨服务器访问时状态丢失。
- 可以通过两台服务器的访问日志验证请求是否均匀分发,确认负载均衡生效。
内容的提问来源于stack exchange,提问作者Khuzaima jamil
相关产品推荐
相关产品推荐

