Переадресація порту Вагранта не працює [закрито]


108

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

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

Але коли я надсилаю запити до цього порту, вони не вдається. Помилка Safari повідомила: "Safari не може відкрити сторінку" http: // localhost: 4567 / ", оскільки сервер несподівано перервав з'єднання."

Я зробив "a" vagrant reloadі побачив у прокрутці "[за замовчуванням] - web: 80 => 4567 (адаптер 1)", тож з чого мені почати вирішувати проблеми? Дякую.


1
Що curl -v 'http://localhost:4567/'говорить? Іноді Safari трохи приємно приховувати повідомлення про помилки.
Стів Лош

2
Також, чи працює curl 'http://localhost:80'сам VM? Якщо ні, проблема не в переадресації порту.
Стів Лош

4
@Steve Losh curlз VM працює. curlвід господаря дає мені (52) Empty reply from server.
Хенк Гей

Перезавантаження бродяг допоможе мені у подібному питанні ...
haudoing

Для мене випадок був із symfony 3: - при запуску sudo php бін / консольний сервер: запуск, який робить сервер працює на 127.0.0.1:8000, тоді я не можу отримати доступ з веб-браузера, згорнувшись у віртуальній машині. Коли я запустив sudo php -S 0.0.0.0:8000 у веб-каталозі, я міг отримати доступ до 127.0.0.1:8082/app_dev.php . Не розумію, чому це відбувається, але працює.
Дарій.V

Відповіді:


80

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

Перше: спробуйте curl 'http://localhost:80'всередині VM. Якщо це не працює, то це точно не переадресація порту.

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

Я перевірив би, що немає брандмауерів, встановлених із обмеженням доступу до порту 80. За замовчуванням Vgrant VM (Ubuntu) не поставляється з налаштованим брандмауером, але ви сказали, що використовуєте щось інше, тому, можливо, варто того перевіряти.

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


14
В основному я смоктав RedHat і iptables. Я перевірив, щоб переконатися, що політика за замовчуванням ACCEPTстосується вхідних з'єднань, але не звернула уваги на користувальницьку ланцюжок правил RedHat, в якій є REJECTправило останніх правил ланцюга. tl; dr. У мене був між собою брандмауер і просто не помічав.
Хенк Гей

Дякую! Саме підлий брандмауер - це те, що спричинило мої проблеми на RHEL 5.5.
Рош

Я передруковую коментар Роберта нижче, оскільки це такий тривіальний спосіб перевірити: запустити service iptables stopяк root, щоб швидко виключити проблему брандмауера гостя. Повторіть його пізніше, якщо потрібно.
Арно Меурет

1
був такий самий випуск із дивним зображенням центоса; iptablesобмежував майже все. Я дотримувався цього керівництва по iptable centos (рішення в розділі 3 Написання простого набору правил ), і він спрацював як принадність :)
GabLeRoux

для мене curl працював всередині, тому я включив мережу Vagrantfileі запустив командуvagrant reload
abhirathore2006

266

Я хотів додати додаткове зауваження, що часто це викликано сервером всередині VM, оскільки він прив'язується до 127.0.0.1, що є циклічним. Ви хочете переконатися, що сервер пов'язаний з 0.0.0.0тим, щоб усі інтерфейси мали доступ до нього.

Деякі вбудовані сервери додатків, такі як сервери розвитку Django та деякі сервери Ruby за замовчуванням 127.0.0.1 за замовчуванням, тому на це слід дивитися.

Крім цього, те, що сказав Стів, справедливо: переконайтеся, що воно працює з VM, і спробуйте деякі інші прості сервери, щоб спробувати і з'ясувати, чи це проблема з конфігурацією.


8
Це було виправлення, необхідне для дробовика, який працює під назвою
Ронце

Це вирішило для мене проблему. Щоб прив’язати Torquebox до 0.0.0.0, запустіть його за допомогою: torquebox run -b 0.0.0.0
Bartek Skwira

3
Так, це була проблема. Потрібно прив’язати до 0,0.0,0. Цікаво, чи існує спосіб, коли Вагрант може автоматично змусити цю проблему в майбутньому?
CMCDragonkai

1
та сама проблема з sinatra та webrick: "set: bind, '0.0.0.0" "вирішила проблему
pragmatic_programmer

це було
виправданням

33

У мене була така ж проблема в CentOS 6.3 w / NGINX, і я знайшов відповідь у iptables на вітрині.

З башти на бродячому вікні виконайте наступні дії:

Перший список поточних правил 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: [порт #] або натисніть його у вашому браузері ззовні бродячого

Більше інформації про конфігурації iptable CentOS можна знайти тут:

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

Удачі.


2
Дякуємо, що написали це. У мене ця проблема була і у Fedora 18, тому це не характерно для CentOS. Я сподіваюся, що це допоможе комусь іншому. :)
Бенджамін Оукс

4
Це я був на CentOS. service iptables stop
Роберт

2
iptables -Fодин зробив це для мене
code_monk

Я знайшов надійне рішення для цього за допомогою деяких команд exec, перелічених у цій публікації в блозі, щоб вирішити цю проблему techie-notebook.blogspot.com/2014/05/… Я повинен був замінити свій шлях на розділи $ {os_path}, як я це зробив у вас немає цієї змінної.
Джошуа Фріке

27

Кращим рішенням для мене є відключення брандмауера

service iptables stop
chkconfig iptables off

+1 працював для мене. Для використання локального екземпляра VirtualBox у мене не було потреби в брандмауері.
Едуардо

це хороший трюк, якщо ви хочете тимчасовий виправлення
brrystrw

0

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

$ curl -v http://localhost:6789

І я отримав

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

Тоді я використав IP-адресу замість цього, воно отримало правильне html-повідомлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.