如何通过Packer在AWS EC2 Windows虚拟机中运行.NET应用并解决访问问题
排查AWS ALB访问显示Windows默认网站的问题
一、IIS站点配置检查
- 确认部署的.NET WebAPI站点是否已设置为默认站点,或是否修改了默认站点的物理路径指向你的应用发布目录。如果默认站点未替换,ALB流量会优先走默认站点。
- 检查站点的绑定信息:是否绑定了正确的IP(建议选“全部未分配”)、端口(默认80/443),无冲突绑定导致你的站点无法接收请求。
- 查看IIS管理器中的站点状态:确保你的.NET应用站点处于“已启动”状态,排除应用池错误或权限问题导致的站点停止。
二、Packer部署脚本验证
- 检查第二个AMI的Packer脚本,确认完成以下操作:
- 克隆代码后,是否用
dotnet publish生成了正确的Release版本发布包(目标框架net8.0)。 - 是否将发布文件复制到自定义IIS目录(如
C:\inetpub\wwwroot\YourAPI),而非默认的C:\inetpub\wwwroot(默认站点目录)。 - 是否创建了新IIS站点并关联到该目录,或修改了默认站点的物理路径。仅复制文件到自定义目录但未配置站点,默认站点不会自动指向它。
- 脚本中是否执行了
iisreset或重启应用池的操作,确保配置生效。
- 克隆代码后,是否用
三、EC2实例与ALB关联检查
- 确认ALB的目标组是否正确关联EC2实例,且实例健康检查状态为“健康”。若健康检查失败,ALB可能不会转发流量到目标实例。
- 检查目标组的健康检查路径:是否设置为你的.NET应用的健康端点(如
/health),而非默认的/(默认站点根路径)。若用默认路径,即使你的站点未正常运行,只要默认站点响应,健康检查就会通过,导致流量仍流向默认站点。 - 验证EC2实例的安全组:允许ALB所在安全组访问实例的80/443端口,确保流量能到达实例。
四、应用权限与日志排查
- 检查IIS应用池的身份:是否设置为拥有应用目录读写权限的账户(如
ApplicationPoolIdentity,需确保该账户对发布目录有权限),权限不足会导致应用无法启动,IIS自动 fallback到默认站点。 - 查看IIS的站点日志(默认路径
C:\inetpub\logs\LogFiles)和.NET应用的本地日志,确认请求是否到达你的站点,还是直接被默认站点处理。若无你的应用的请求记录,说明流量未路由到目标站点。
解决方法示例
若需通过Packer修改默认站点物理路径,以下是关键PowerShell代码片段:
# 发布.NET应用 dotnet publish "C:\repo\YourAPI.csproj" -c Release -o "C:\inetpub\wwwroot\YourAPI" # 修改默认站点物理路径 Import-Module WebAdministration Set-ItemProperty 'IIS:\Sites\Default Web Site' -name physicalPath -value 'C:\inetpub\wwwroot\YourAPI' # 重启应用池使配置生效 Restart-WebAppPool -Name 'DefaultAppPool'
同时,更新ALB目标组的健康检查路径为你的应用健康端点(如/api/health),确保仅当你的应用正常运行时,ALB才会转发流量。
内容的提问来源于stack exchange,提问作者Bianca
相关产品推荐
相关产品推荐

