Я столкнулся с небольшой проблемой в конце руководства по началу работы дляvagrant
. Я работаю над базовым ящиком CentOS, на котором работает Apache2 (подготовка через Puppet). Я настроил переадресацию портов для веб-запросов, используя следующую строку Vagrantfile
:
config.vm.forward_port "web", 80, 4567
Но когда я делаю запросы к этому порту, они терпят неудачу. Safari сообщает об ошибке: «Safari не может открыть страницу« http: // localhost: 4567 / », потому что сервер неожиданно разорвал соединение».
Я сделал vagrant reload
и увидел в прокрутке «[default] - web: 80 => 4567 (adapter 1)», так с чего мне начать устранение неполадок? Спасибо.
curl -v 'http://localhost:4567/'
говорит? Иногда Safari слишком хорошо скрывает сообщения об ошибках.curl 'http://localhost:80'
от самой ВМ работает? Если нет, проблема не в переадресации портов.curl
изнутри виртуальной машины работает.curl
от хозяина дает мне(52) Empty reply from server
.Ответы:
Я сделаю это реальным ответом, а не просто дополнительными комментариями.
Первое: попробуйте
curl 'http://localhost:80'
из виртуальной машины. Если это не сработает, значит, дело не в переадресации портов.Далее: попробуйте
curl -v 'http://localhost:4567/'
с вашего хост-компьютера. Curl может дать вам более точное сообщение об ошибке, чем Safari.Я бы проверил, что нет настроенных брандмауэров, ограничивающих доступ к порту 80. Виртуальная машина Vagrant по умолчанию (Ubuntu) не поставляется с установленным брандмауэром, но вы сказали, что используете что-то еще, так что это может того стоить Проверять.
Если это не так, попробуйте создать что-то другое, кроме Apache, указанного на порту 80. Python поставляется с простым HTTP-сервером, который вы можете использовать - перейдите в папку с помощью
index.html
и запуститеsudo python -m SimpleHTTPServer 80
, затем попробуйте нажать на него с помощью curl из обоих полей. Если это сработает, то, вероятно, проблема в конфигурации Apache. У меня недостаточно опыта работы с Apache, чтобы помочь в этом случае (я использую nginx).источник
iptables
. Я проверил, что политика по умолчанию предназначенаACCEPT
для входящих подключений, но не обратил внимания на настраиваемую цепочку правил RedHat, которая имеет универсальноеREJECT
правило в качестве последнего правила в цепочке. tl; dr У меня был брандмауэр, и я просто не заметил.service iptables stop
от имени пользователя root, чтобы быстро исключить проблему с гостевым брандмауэром. При необходимости включите его позже.iptables
ограничивал почти все. Я следил за этим руководством по iptable centos (решение в разделе 3 «Написание простого набора правил» ), и оно сработало как шарм :)Vagrantfile
и запустил командуvagrant reload
Я хотел добавить дополнительное примечание, что часто это вызвано сервером внутри виртуальной машины, потому что он привязывается к
127.0.0.1
, что является обратной связью. Вы должны убедиться, что сервер привязан к нему,0.0.0.0
чтобы все интерфейсы могли получить к нему доступ.Некоторые встроенные серверы приложений, такие как серверы разработки Django и некоторые серверы Ruby, по умолчанию работают
127.0.0.1
по умолчанию, так что это то, чего стоит остерегаться.В остальном то, что сказал Стив, остается верным: убедитесь, что он работает внутри виртуальной машины, и попробуйте несколько других простых серверов, чтобы попытаться выяснить, является ли это проблемой конфигурации.
источник
У меня была такая же проблема на CentOS 6.3 с NGINX, и я нашел ответ в iptables на бродячем поле.
Из bash в бродячем поле выполните следующие действия:
Первый список текущих правил iptable
Затем удалите текущие правила:
Разрешить SSH-соединения на TCP-порту 22
Установите политики по умолчанию для цепочек INPUT, FORWARD и OUTPUT
Установить доступ для localhost
Принимать пакеты, принадлежащие установленным и связанным соединениям
Сохранить настройки
Список измененных правил
Curl localhost: [порт #] или нажмите его в браузере извне бродяги
Более подробную информацию о конфигурациях CentOS iptable можно найти здесь:
http://wiki.centos.org/HowTos/Network/IPTables
Удачи.
источник
service iptables stop
iptables -F
один сделал это за меняЛучшее решение для меня - отключить брандмауэр
источник
Я хочу добавить еще одну заметку, как и Митчелл. в моем случае пересылаю на номер 6789 из 80
И я получил
Затем я использовал вместо этого IP-адрес, он получил правильное html-сообщение.
источник