В настоящее время у меня есть 2 сервера Ubuntu 12.04 с балансировкой нагрузки. Если я перейду к кому-нибудь из оболочки и наберу:
wget stackoverflow.com
Страница загружается в index.html
. Однако если предположить, что сайт, размещенный на этих серверах, называется mysite.com
, звоню
wget mysite.com
Я получил:
Resolving mysite.com (mysite.com)... 50.XXX.YY.ZZZ
Connecting to mysite.com (mysite.com)|50.XXX.YY.ZZZ|:80... failed: Connection refused.
где 50.XXX.YY.ZZZ
публичный IP mysite.com
. Есть идеи, что не так на этих серверах?
Основная проблема заключается в следующем:
Сервер имеет частный внутренний IP-адрес. (Я назову его 192.168.0.2 для простоты.)
Он открывает соединение со своего частного внутреннего IP-адреса на свой публичный адрес. (С 192.168.0.2 по 59.XXX.YY.ZZ)
Это идет к маршрутизатору, следуя маршруту сервера по умолчанию. (Поскольку машина не знает, что публичный адрес связан с самим собой.)
Порт маршрутизатора пересылает запрос на общедоступный IP-адрес и пересылает его на машину. Запрос по-прежнему имеет источник 192.168.0.2, но теперь он имеет адрес назначения 192.168.0.2.
Машина получает соединение от 192.168.0.2 к 192.168.0.2, принимает соединение и отправляет себе ответ. (Поскольку он знает, что 192.168.0.2 является локальным.)
Машина не может получить ответ от 192.168.0.2, поскольку он ожидал ответа от 59.XXX.YY.ZZ, и попытка подключения не удалась.
Для шпилька NAT для работы маршрутизатор должен не только пересылать запрос на правильный внутренний компьютер, перезаписывая место назначения, но также должен переписывать источник, чтобы ответные пакеты возвращались обратно через маршрутизатор, чтобы их можно было преобразовать с помощью NAT. Многие маршрутизаторы не могут этого сделать, и многим может потребоваться определенная конфигурация.
Ставить
127.0.0.1 localhost mysite.com
в вашем / etc / hosts
Я предполагаю, что он маршрутизирует пакеты за пределами вашего ящика с общедоступным IP, и почему-то они не возвращаются.