В конце руководства "Начало работы" для vagrant
я столкнулся с небольшой проблемой. Я работаю над базовым ядром CentOS, в котором работает Apache2 (подготовка через Puppet). Я настроил перенаправление портов для веб-запросов, используя следующую строку в Vagrantfile
:
config.vm.forward_port "web", 80, 4567
Но когда я делаю запросы к этому порту, они терпят неудачу. Ошибка, о которой сообщает Safari, - это "Safari can not open the page" http://localhost:4567/, потому что сервер неожиданно сбросил соединение. '
Я сделал vagrant reload
и увидел "[default] - web: 80 = > 4567 (адаптер 1)" в прокрутке, так где я должен начать устранять это? Спасибо.
Я сделаю это реальным ответом, а не просто комментариями.
Первое: попробуйте 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).
iptables
. Я проверил, чтобы убедиться, что по умолчанию ACCEPT
политика ACCEPT
для входящих соединений, но не обратил внимания на цепочку пользовательских правил RedHat, в которой правило REJECT
всех REJECT
является последним правилом в цепочке. Я имел брандмауэр на пути и просто не заметил.
Я хотел добавить дополнительную заметку о том, что часто это вызвано сервером внутри виртуальной машины, поскольку она привязывается к 127.0.0.1
, которая является loopback. Вы хотите убедиться, что сервер привязан к 0.0.0.0
, чтобы все интерфейсы могли получить к нему доступ.
Некоторые встроенные серверы приложений, такие как серверы разработки Django, и некоторые серверы Ruby по умолчанию имеют значение 127.0.0.1
по умолчанию, так что это нужно следить за.
Кроме того, Стив сказал, что это верно: убедитесь, что он работает из VM и попробуйте другие простые серверы, чтобы попытаться выяснить, является ли это проблемой конфигурации.
У меня была такая же проблема на CentOS 6.3 w/NGINX, и я нашел ответ в iptables на бродячем поле.
Из bash в окне бродяг выполните следующие действия:
Первый список текущих правил 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
Curl localhost: [port #] или ударить его в браузере извне бродяг
Дополнительная информация о конфигурациях CentOS iptable, найденных здесь:
http://wiki.centos.org/HowTos/Network/IPTables
Удачи.
service iptables stop
Лучшим решением для меня является отключение брандмауэра
service iptables stop
chkconfig iptables off
Я хочу добавить еще одно примечание, такое как Mitchell. если в моем случае я отправлю его 6789 из 80
$ curl -v http://localhost:6789
И я получил
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
Затем вместо этого я использовал IP-адрес, он получил правильное сообщение html.
curl -v 'http://localhost:4567/'
? Иногда Safari слишком хорошо прячет сообщения об ошибках.curl 'http://localhost:80'
с самой виртуальной машины? Если нет, проблема не в переадресации портов.