AWS EC2 Windows实例部署Hello World Web应用后无法外部访问求助
排查步骤及解决方案
1. 确认.NET应用的监听地址
这是最容易遗漏的核心问题:多数.NET应用(尤其是Kestrel托管的)默认仅绑定localhost,导致仅本地可访问。
- 打开应用的
appsettings.json,检查Kestrel配置:
或启动时强制指定监听地址:"Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:80" } } }dotnet run --urls=http://0.0.0.0:80 - 验证监听状态:在EC2实例命令行执行
netstat -ano | findstr ":80",确认输出包含0.0.0.0:80(而非仅127.0.0.1:80),并记录对应PID。
2. 检查EC2子网路由配置
- 确认实例所属子网的路由表已关联互联网网关(IGW):
进入AWS VPC控制台,找到子网绑定的路由表,检查是否存在0.0.0.0/0指向IGW的路由条目,无则添加。 - 确认实例已分配有效公网IP/弹性公网IP(EIP):
在EC2实例详情页查看「公网IP」字段,确保有有效值(可临时开启Windows ICMP规则测试ping连通性)。
3. 验证子网网络ACL的双向规则
NACL是无状态规则,必须同时配置入站和出站放行:
- 入站规则:允许
0.0.0.0/0访问目标端口(80/5001/8080) - 出站规则:允许
0.0.0.0/0的所有端口(至少要放行应用的响应流量,可临时全开测试)
4. 检查Windows端口监听权限
非管理员用户绑定1024以下端口需额外授权:
- 执行
netsh http show urlacl,查看是否存在http://+:80/的权限条目 - 若无,以管理员身份执行:
netsh http add urlacl url=http://+:80/ user=Everyone,之后重启应用
5. 做端口连通性测试
- 从同子网其他EC2实例执行:
Test-NetConnection <目标实例私网IP> -Port 80,确认是否能建立连接 - 若同子网也无法访问,排除公网问题,聚焦实例内部、安全组或NACL配置
6. 确认应用运行状态
- 用任务管理器检查之前
netstat查到的PID对应进程是否正常运行 - 查看应用日志文件,确认无启动失败、端口绑定失败等报错
内容的提问来源于stack exchange,提问作者Daniel Williams
相关产品推荐
相关产品推荐

