Я недавно перешел на AWS из Rackspace и настраиваю простой сервер геолокации, используя Freegeopip. Хотя следующие команды отлично работают на новом сервере 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 instace, но AWS выдает мне эту ошибку:
listen tcp <MY IP ADDRESS>:8080: bind: cannot assign requested address
Я проверил этот порт с помощью netstat, и на нем ничего не работает. Понятия не имею, почему я получаю эту ошибку. Любые идеи?
Во многих случаях привязка к 0.0.0.0 - лучший способ действия, если у вас нет конкретной причины привязать только к определенному адресу.
Но я предполагаю, что то, что вы делаете, не работает, потому что вы пытаетесь привязаться к общедоступному IP-адресу экземпляра, который вы найдете (через ifconfig
) ваш IP-стек не знает.
Экземпляры AWS изначально знают только свой частный IP-адрес, к которому вам нужно привязаться.
Общедоступные адреса инстансов EC2 (классический и VPC), ассоциированные с инстансами, преобразовываются 1: 1 NAT в частный адрес сетевой инфраструктурой AWS.
AWS выполняет преобразование сетевых адресов между вашим экземпляром и Интернетом. Таким образом, экземпляр AWS может быть доступен по IP-адресу 08.08.08.0808, однако сервер фактически настроен на использование 88.88.88.88. Что мне нужно сделать, так это привязать к внутреннему IP-адресу сервера, который я нашел с помощью ifconfig.