Переадресация порта Вагранта не работает

Я столкнулся с небольшой проблемой в конце руководства по началу работы дляvagrant, Я работаю над базовой версией CentOS, на которой работает Apache2 (подготовка через Puppet). Я настроил переадресацию портов для веб-запросов, используя следующую строку в Vagrantfile:

 config.vm.forward_port "web", 80, 4567

Но когда я делаю запросы к этому порту, они терпят неудачу. Safari сообщает об ошибке: "Safari не может открыть страницу" http://localhost:4567/", поскольку сервер неожиданно разорвал соединение".

Я сделал vagrant reload и увидел "[по умолчанию] - web: 80 => 4567 (адаптер 1)" в свитке, так где я должен начать устранять это? Благодарю.

5 ответов

Решение

Я сделаю это фактическим ответом вместо просто большего количества комментариев.

Первое: попробуй curl 'http://localhost:80' изнутри ВМ. Если это не сработает, то это определенно не переадресация портов.

Далее: попробуйте curl -v 'http://localhost:4567/' с вашего хоста. Curl может дать вам лучшее сообщение об ошибке, чем Safari.

Я бы проверил, что нет установленных брандмауэров, ограничивающих доступ к порту 80. Стандартная Vagrant VM (Ubuntu) не поставляется с настроенным брандмауэром, но вы сказали, что используете что-то другое, так что это может стоить того Проверять.

Если это не так, попробуйте сделать что-то кроме Apache, перечисленного на порте 80. Python поставляется с простым HTTP-сервером, который вы можете использовать - перейдите в папку с index.html и беги sudo python -m SimpleHTTPServer 80, а затем попробуйте поразить это локонами из обеих коробок. Если это работает, то это, вероятно, проблема конфигурации Apache. У меня недостаточно опыта работы с Apache, чтобы помочь, если это так (я использую nginx).

Я хотел добавить дополнительное примечание, что часто это вызывается сервером внутри виртуальной машины, потому что он привязывается к 127.0.0.1, который является петлевой. Вы хотите убедиться, что сервер связан с 0.0.0.0 так что все интерфейсы могут получить к нему доступ.

Некоторые встроенные серверы приложений, такие как серверы разработки Django и некоторые серверы Ruby, по умолчанию имеют 127.0.0.1 по умолчанию, так что это то, что нужно остерегаться.

Кроме того, то, что сказал Стив, остается верным: убедитесь, что оно работает изнутри виртуальной машины, и попробуйте другие простые серверы, чтобы попытаться выяснить, является ли это проблемой конфигурации.

У меня была такая же проблема на CentOS 6.3 с NGINX, и я нашел ответ в iptables на бродячей коробке.

Из bash на vagrant box, выполните следующие действия:

Первый список текущих правил iptable

iptables -L -v

Затем очистите текущие правила:

iptables -F

Разрешить SSH-соединения по TCP-порту 22

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Установить политики по умолчанию для цепочек INPUT, FORWARD и OUTPUT

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Установить доступ для localhost

iptables -A INPUT -i lo -j ACCEPT

Принять пакеты, принадлежащие установленным и связанным соединениям

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Сохранить настройки

/sbin/service iptables save

Список измененных правил

iptables -L -v

Скрутите localhost:[port#] или нажмите его в своем браузере снаружи vagrant

Более подробную информацию о конфигах CentOS iptable можно найти здесь:

http://wiki.centos.org/HowTos/Network/IPTables

Удачи.

Лучшее решение для меня - отключение брандмауэра

service iptables stop
chkconfig iptables off

Я хочу добавить еще одну заметку, такую ​​как Митчелл. если мой случай, я пересылаю его на 6789 из 80

$ curl -v http://localhost:6789

И я получил

<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>

Затем вместо этого я использовал IP-адрес, он получил правильное HTML-сообщение.

Другие вопросы по тегам