You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS EC2部署Go应用时出现连接拒绝问题求助

解决Go应用部署到AWS EC2后公网无法访问的问题

我来帮你排查下这个问题——你遇到的核心问题大概率是应用监听地址的配置,而不是部署方式本身,咱们一步步来理清楚:

1. 修正应用的监听地址(最关键的一步)

你的应用现在监听的是localhost:3000(也就是127.0.0.1:3000),这个地址是EC2实例内部的回环地址,只有实例本身能访问,外部(包括你的浏览器通过公网IP访问)根本无法连接到这个端口。

解决方法很简单:修改Go代码里的监听配置,把localhost或者127.0.0.1改成0.0.0.0。举个例子:

  • 原来的代码可能是:
    http.ListenAndServe("localhost:3000", nil)
    
  • 修改后:
    http.ListenAndServe("0.0.0.0:3000", nil)
    

0.0.0.0表示监听实例上所有可用的网络接口,这样外部请求就能通过EC2的公网IP访问到你的应用了。改完后重新编译应用,上传到EC2再运行试试。

2. 验证EC2的网络配置(双重确认)

虽然你提到已经开放了安全组的3000端口,但还是建议再检查这两点:

  • 安全组入站规则:确保规则是允许0.0.0.0/0(所有IP)或者你本地的公网IP访问3000端口(TCP协议),不要只配置了出站规则。
  • 实例内部防火墙:有些EC2镜像(比如Amazon Linux 2、Ubuntu)默认启用了防火墙(iptables/ufw),可能会挡住3000端口。你可以在EC2终端执行:
    # 查看ufw状态(Ubuntu)
    sudo ufw status
    # 查看iptables规则
    sudo iptables -L
    

如果发现有拦截规则,添加允许3000端口的规则即可,比如:

sudo ufw allow 3000/tcp

3. 确认应用的监听状态

运行应用后,在EC2终端执行以下命令,检查端口的监听情况:

netstat -tulpn | grep 3000
# 或者用ss命令(更现代)
ss -tulpn | grep 3000

如果输出里的地址是127.0.0.1:3000,说明还是监听回环地址,得回到第一步修改代码;如果是0.0.0.0:3000或者EC2实例的私网IP:3000,那监听配置是对的,再去排查网络层面的问题。


内容的提问来源于stack exchange,提问作者FAFA REN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:17:38