Переадресация портов Vagrant не работает [закрыто]
-
12-11-2019 - |
Вопрос
У меня возникла небольшая проблема в конце Руководство по началу работы для vagrant
.Я работаю над базовой системой CentOS, на которой работает Apache2 (предоставление через Puppet).Я настроил переадресацию портов для веб-запросов, используя следующую строку в Vagrantfile
:
config.vm.forward_port "web", 80, 4567
Но когда я делаю запросы к этому порту, они терпят неудачу.Ошибка, о которой сообщает Safari: «Safari не может открыть страницу».http://локальный хост: 4567/«потому что сервер неожиданно разорвал соединение».
я сделал vagrant reload
и увидел "[по умолчанию] -- 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).
Другие советы
Я хотел добавить дополнительное примечание, что часто это вызвано сервером внутри виртуальной машины, поскольку он привязывается к 127.0.0.1
, что является обратной связью.Вам нужно убедиться, что сервер привязан к 0.0.0.0
чтобы все интерфейсы могли получить к нему доступ.
Некоторые встроенные серверы приложений, такие как серверы разработки Django и некоторые серверы Ruby, по умолчанию 127.0.0.1
по умолчанию, так что на это следует обратить внимание.
В остальном то, что сказал Стив, справедливо:Убедитесь, что он работает внутри виртуальной машины, и попробуйте другие простые серверы, чтобы выяснить, не является ли это проблемой конфигурации.
У меня была та же проблема в CentOS 6.3 с 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
Установите доступ для локального хоста
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
Дополнительную информацию о конфигурациях iptable CentOS можно найти здесь:
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-сообщение.