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

93

В конце руководства "Начало работы" для 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)" в прокрутке, так где я должен начать устранять это? Спасибо.

  • 1
    Что говорит curl -v 'http://localhost:4567/' ? Иногда Safari слишком хорошо прячет сообщения об ошибках.
  • 2
    Также работает ли curl 'http://localhost:80' с самой виртуальной машины? Если нет, проблема не в переадресации портов.
Показать ещё 3 комментария
Теги:
centos
http
portforwarding
vagrant

5 ответов

72
Лучший ответ

Я сделаю это реальным ответом, а не просто комментариями.

Первое: попробуйте 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).

  • 14
    В основном я сосу на RedHat и iptables . Я проверил, чтобы убедиться, что по умолчанию ACCEPT политика ACCEPT для входящих соединений, но не обратил внимания на цепочку пользовательских правил RedHat, в которой правило REJECT всех REJECT является последним правилом в цепочке. Я имел брандмауэр на пути и просто не заметил.
  • 0
    Спасибо! Это подлое правило брандмауэра и стало причиной моих проблем на RHEL 5.5.
Показать ещё 3 комментария
242

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

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

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

  • 8
    Это было исправление, необходимое для запуска ружья.
  • 0
    Это решило проблему для меня. Чтобы привязать Torquebox к 0.0.0.0, запустите его с помощью :itchbox run -b 0.0.0.0
Показать ещё 7 комментариев
31

У меня была такая же проблема на 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

Удачи.

  • 2
    Спасибо, что написали это. У меня была такая же проблема на Fedora 18, поэтому она не относится к CentOS. Я надеюсь, что это помогает кому-то еще. :)
  • 4
    Это был я на CentOS. service iptables stop
Показать ещё 2 комментария
28

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

service iptables stop
chkconfig iptables off
  • 0
    +1 работал на меня. Для использования локального экземпляра VirtualBox у меня не было необходимости в брандмауэре.
  • 0
    это хороший трюк, если вы хотите временное исправление
0

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

$ curl -v http://localhost:6789

И я получил

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню