Переадресация порта Вагранта не работает
Я столкнулся с небольшой проблемой в конце руководства по началу работы для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-сообщение.