Как заставить Apache обслуживать сайт через VirtualBox?

8

Из этого туториала я узнал , как создать виртуальную машину Ubuntu Server (12.10, 64-разрядная) в VirtualBox на хост-компьютере Windows 7 , установить Apache и обслуживать сайт из фиктивного домена, доступного через браузер хост-машины.

Потребовался день и много попыток (хотя казалось, что я следовал инструкциям, поскольку они были изложены, я всегда делал что-то не так), и я наконец сделал это.

Я нахожу Ubuntu гораздо более гладкой средой разработки, чем Windows, и поэтому я хотел сделать то же самое в Ubuntu. Итак, на этот раз я создал виртуальную машину Ubuntu Server в VirtualBox на хост-компьютере Ubuntu , установил Apache и настроил его. Но когда я захожу на сайт через фиктивный домен, я получаю ошибку « Сервер не найден ».

Да, я изменил /etc/hostsфайл так же, как упомянуто в руководстве (для Windows 7). Но я не мог заставить его работать. Не знаю что не так. Кто-нибудь знает, что еще я должен делать?

РЕДАКТИРОВАТЬ: Если я не достаточно ясно, пожалуйста, спросите. Я хочу уточнить.

это я
источник
Вы хотите использовать сервер со своего компьютера (например, для разработки) или от других пользователей в сети?
Дависейн
Сервер установлен на виртуальной машине (с использованием virtualbox), и я хочу получить доступ к тестовому веб-сайту, обслуживаемому сервером, из браузера на хост-машине. Надеюсь, это понятно. Кстати, я опубликовал ответ (но могу пометить его как ответный только через 2 дня).
its_me
1
Конечно, я уже проголосовал за ваш ответ, который очень хороший (кстати). Я просто хотел порекомендовать вам добавить как только хост и мост (для доступа в интернет). А также другой ответ - требование в соединенном окружении, если вы хотите получить доступ к ВМ извне. Чтобы вопрос был полностью понятен для других;)
Davisein

Ответы:

5

Если вам нужно разрешить другим компьютерам в вашей физической сети доступ к вашей виртуальной машине или если виртуальной машине требуется доступ к Интернету, используйте мостовую сеть. В противном случае, придерживайтесь только сети хоста.

  1. Остановите свою виртуальную машину и откройте настройки для нее в диспетчере VirtualBox (OSE)

  2. Перейти на вкладку Сеть

  3. Выберите режим сети по вашему выбору (мостовая сеть или только хост)

    Если вы хотите использовать мостовую сеть, вы должны выбрать правильный сетевой адаптер в Имя: ____________ . Для проводных соединений вы бы выбрали что-то вроде eth0. Беспроводные соединения обычно называются wlan0(номера могут отличаться).

  4. Сохранить настройки

  5. Запустите Ubuntu VM

  6. Когда вверх, вы можете получить IP-адрес, запустив:

    sudo ifconfig
    

    Вывод должен выглядеть примерно так:

    eth0      Link encap:Ethernet  HWaddr 08:00:27:f4:c3:7b  
              inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fef4:c37b/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:20 errors:0 dropped:0 overruns:0 frame:0
              TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:3244 (3.2 KB)  TX bytes:2512 (2.5 KB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    

    В приведенном выше выводе 192.168.1.4(во второй строке) указан IP-адрес, который можно использовать в вашей хост-системе Ubuntu для доступа к вашей виртуальной машине.

  7. Теперь откройте файл hosts на хост-машине Ubuntu:

    sudo gedit /etc/hosts
    

    (Если вы не хотите использовать gedit, заменить слово с именем вашего любимого редактора. Ев vim, nano.)

    Когда файл открыт, добавьте эту строку и сохраните ее:

    192.168.1.4   my-dummy-site.com
    
  8. Откройте любой браузер на своем хост-компьютере и перейдите на my-dummy-site.comстраницу доступа к вашему сайту, обслуживаемую прямо из VirtualBox.

(Отдельное спасибо @iSeth за помощь . Полностью основанный на этом ответе , бит НЕ тот же.)

это я
источник
1
Это решение должно работать. Я пытаюсь сервер разработки с этим конфигом прямо сейчас. Кроме того, и мост, и только для хоста могут использоваться одновременно. Мосты не позволяют хост-машине достигать вашего собственного сервера (насколько я знаю). И только для хоста не разрешает доступ в интернет (поэтому без обновлений). Я обычно использую оба
Davisein
1
@ Дэвисейн Неверно. Режим сетевого моста позволяет получать доступ к вашим виртуальным машинам с хост-машины, а также предоставляет ей (ВМ) доступ к интернет-соединению, используемому хостом. :)
its_me
Правда. Я не удаляю свой предыдущий комментарий, чтобы ваш не выглядел странно, но это неправильно. Система, которая не позволяет хосту и гостевой машине общаться, - это NAT, как сказано здесь virtualbox.org/manual/ch06.html .
Дависейн
Убедитесь, что IPTables не блокирует соединение ...
Ethereal
Я следовал этим инструкциям для T. Если я открою браузер на виртуальной машине Ubuntu, он сможет разрешить DNS и обслуживать my-dummy-site.com. Однако, если я открою браузер вне виртуальной машины Ubuntu (на моей машине с Windows 10, где у меня установлена ​​виртуальная машина), он не сможет разрешить my-dummy-site.com. Это может разрешить IP 192.168.1.118, хотя! В чем может быть проблема?
Крис Нильсен
0

Только rootможет открыть порты <1024, поэтому, если обычный пользователь использует VirtualBox, он не откроет порт 80 на хосте и не перенаправит его гостю.

Вы можете разрешить программам открывать привилегированные порты, выполнив:

setcap 'cap_net_bind_service=+ep' /path/to/executable

Я не знаю пути к VirtualBoxисполняемому файлу, но вы легко можете найти его, ища что-то похожее на «VirtualBox» в выводе ps auxf.

Эрик Карвалью
источник
Я попробую и дам вам знать. Между тем, вы сказали, что «Только root может открывать порты <1024» , но я все же смог заставить его работать (см. Мое решение ниже).
its_me
@its_me потому что ваше решение использует мостовые сети.
Эрик Карвалью
Ах хорошо. Спасибо за разъяснения, Эрик. :)
its_me