В процессе веб-разработки нам часто требуется протестировать макет наших приложений и веб-сайтов в нескольких браузерах. Поскольку запуск всех этих браузеров в автономном режиме практически невозможен, а такие приложения, как IETester не работают безупречно и не могут работать в Windows 7, было бы неплохо иметь возможность запускать виртуальные машины для этих браузеров, чтобы иметь «собственный» опыт.
В настоящее время я пытаюсь использовать Виртуальная Windows XP Бег IE7. Моя собственная установка - это Windows 7 RC1 64-битная. Большинство наших веб-сайтов и приложений разрабатываются локально с использованием сопоставлений в файле hosts Windows.
Эта проблема:
При переходе к http: //mywebsite.localhost из виртуальной машины запрашивается файл хоста виртуальной машины вместо фактической ОС поверх виртуальной машины. Кроме того, когда добавляется точно такое же сопоставление, браузер (очевидно) по-прежнему переходит на «виртуальный локальный хост».
Пожалуйста, прочтите все инструкции ниже, прежде чем начинать их, и проверьте, что вам нужно сделать, чтобы отменить их выполнение. Это по памяти, сейчас пользуюсь Mac.
Я предполагаю, что вы используете VMware и свою виртуальную машину [обычное сокращение от Virtual Machine] в сетевом режиме NAT.
Я использую термин хост-система для установки операционной системы с VMware и гостевая система для системы, работающей внутри VMware, в соответствии с обычным языком VMware.
Откройте cmd.exe на хост-машине и введите:
ipconfig / все
Запишите IP-адрес для интерфейса VMware NAT.
Измените файл hosts,% systemroot% \ System32 \ Drivers \ Etc \ hosts, в вашей хост-системе так, чтобы он использовал IP-адрес адаптера VMware NAT вместо 127.0.0.1 для локальных веб-сайтов.
Убедитесь, что веб-сервер прослушивает этот IP-адрес.
В хост-системе в командной строке:
rmtshare \\name-of-host-system\hostspath=%systemroot%\System32\Drivers\Etc /grant Everyone:r
Убедитесь, что на этом пути нет конфиденциальной информации.
Создайте командный файл c: \ hostsfile \ vm_hosts_copy.bat в гостевой системе со следующим содержимым:
copy \\name-of-host-system\hostspath\hosts %systemroot%\System32\Drivers\Etc
Импортируйте это в свой реестр:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"CopyHostsFile"="c:\hostsfile\cm_hosts_copy.bat"
Если все это будет сделано, вы сможете работать с одним и тем же файлом hosts в вашей хост-системе и во всех гостевых системах. Файл hosts в гостевых системах будет обновляться при каждой перезагрузке. Вам нужно только изменить его в обычном месте,% systemroot% \ System32 \ Drivers \ Etc \ hosts, в вашей хост-системе.
Вы можете использовать это на всех своих виртуальных машинах Windows и аналогичные сценарии с smbclient и /etc/rc.local в большинстве систем Unix для многоплатформенного тестирования.
Правильный ответ на это уже существует в Superuser https://superuser.com/questions/144453/virtualbox-guest-os-accessing-local-server-on-host-os - но я резюмирую здесь:
Как только 127.0.0.1
или localhost
магические адреса для каждого компьютера, чтобы ссылаться на себя, 10.0.2.2
- это магический адрес гостевой ОС для обращения к своему хосту, по крайней мере, в мире VirtualBox. Мой процесс настройки виртуальной машины VirtualBox, которая может поражать веб-сайты, обслуживаемые локально в ОС хоста:
.ovf
файл)C:\Windows\System32\Drivers\etc\hosts
и повторите все взломы, которые вы сделали для ОС хоста, заменив 127.0.0.1
с участием 10.0.2.2
, например вы можете добавить строку вроде 10.0.2.2 local.dev.example.com
local.dev.example.com
) - он должен загрузить страницу, обслуживаемую ОС хостаЕсли вы не взламываете файлы хостов, вы можете просто использовать 10.0.2.2
прямо в гостевой ОС. Надеюсь, это поможет!
Настройте свои виртуальные машины для использования мостовой сети вместо NAT (если это еще не сделано). Теперь виртуальная машина находится в той же сети, что и хост.
Настройте файл hosts гостевой виртуальной машины таким же, как ваша рабочая станция (хост виртуальной машины).
то есть:
[IP-адрес ВМ HOST] mywebsite.localhost
Вроде сбоку, но если вы собираетесь использовать много виртуальных машин для тестирования, настройте DNS-сервер на хосте с тестовой зоной, которая пересылается на ваши обычные DNS-серверы. Затем измените хост, чтобы использовать локальный DNS-сервер, и виртуальная машина должна следовать.
Андерс
Поскольку у вас есть доступ к файловой системе Windows 7 изнутри виртуальной машины, кажется, что вы можете настроить виртуальную машину так, чтобы она копировала файл хостов Windows 7 в файл хоста виртуальной машины во время запуска. Это скорее теоретический, чем практический ответ, поскольку у меня нет Windows 7, с которой можно было бы попробовать.
Вы должны как-то организовать, чтобы ваши виртуальные машины «видели» друг друга через DNS или функцию lmhosts. Я бы также избегал использовать имена компьютеров с localhost, вы можете вообще не использовать суффикс или что-то вроде mypc.local
Основной файл LMHOSTS всегда находится в каталоге% systemroot% \ System32 \ Drivers \ Etc. С помощью Microsoft TCP / IP вы можете включать другие файлы LMHOSTS с локальных и удаленных компьютеров.
Пользователи могут импортировать файл LMHOSTS с удаленных компьютеров в сети,
Также это МС КБ Статья.
Есть ли способ сделать локальный хост виртуальной машины таким же, как фактический локальный хост Windows 7?
Вышесказанное заставляет меня думать, что вы, возможно, столкнулись с концептуальным «лежачим полицейским». Ваша виртуальная машина не будет (и не должна) думать о своем хосте как о локальном. Это другое логическое устройство в сети.
Localhost - это своего рода зарезервированный термин, который всегда указывает на 127.0.0.1. Попытка подорвать это очень похоже на то, как отрубить голову кувалде, чтобы превратить ее в трость (вместо того, чтобы просто использовать палку).
DNS и файлы хоста существуют именно по этой причине.
Я бы просто поместил squid или другой прокси на хост-машину, и все гости использовали бы его в качестве прокси, чтобы localhost был локальным хостом хоста, а файл hosts хоста был бы соблюден.