绑定:无法分配请求的地址

绑定:无法分配请求的地址

我最近从 Rackspace 切换到 AWS,并且正在使用以下工具设置一个简单的地理定位服务器免费地理管。虽然以下命令在新的 Rackspace 服务器(Ubuntu)上完美运行,但我无法在 AWS 上运行(尝试过 Red Hat 和 Ubuntu)。以下是我用来设置它的代码:

curl -s https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz | tar -C /opt -zx
export GOPATH=$HOME
export GOROOT=/opt/go
export PATH=$PATH:/opt/go/bin
go get github.com/fiorix/freegeoip/cmd/freegeoip
$GOPATH/bin/freegeoip -addr="<MY IP ADDRESS>:8080"

正如我所说,这在我的 Rackspace 实例上运行良好,但 AWS 给出了此错误:

listen tcp <MY IP ADDRESS>:8080: bind: cannot assign requested address

我用 netstat 检查了这个端口,上面没有任何程序在运行。我不知道为什么会出现这个错误。有什么想法吗?

答案1

在许多情况下,绑定到 0.0.0.0 是最好的做法,除非您有特定的原因只绑定到特定地址。

但我认为你正在做的事情没有效果,因为你试图绑定到实例的公共 IP 地址,而你会发现(通过ifconfig)你的 IP 堆栈并不知道这个地址。

AWS 实例仅本身知道其私有 IP 地址,这是您需要绑定的。

与实例关联的 EC2(经典和 VPC)实例公共地址通过 AWS 网络基础设施进行 1:1 NAT 转换为私有地址。

答案2

AWS 在您的实例和互联网之间运行网络地址转换。因此,AWS 实例可能可以通过 IP 地址 08.08.08.0808 访问,但服务器实际上配置为使用 88.88.88.88。我需要做的是绑定到我使用 ifconfig 找到的服务器的内部 IP。

相关内容