Браузер с собственным файлом hosts?

36

У меня есть несколько промежуточных и тестовых серверов, для которых мне нужно постоянно изменять свой файл hosts (они зависят от имени домена, поэтому я должен изменить файл hosts, чтобы заставить их работать).

Я нахожу это раздражающим. Я бы хотел установить портативный браузер для каждого типа сайта, с которым я хочу работать. Существует ли какая-либо версия какого-либо графического веб-браузера (включая браузеры, основанные на механизмах рендеринга других браузеров), которая будет делать это?

Таким образом, я могу просто запустить экземпляр, который уже настроен для работы с подготовкой, если я хочу протестировать подготовку.

Любые идеи?

РЕДАКТИРОВАТЬ: Важной особенностью является возможность одновременного запуска двух браузеров, оба some-address.comиз которых обращаются к браузеру, но один браузер направляет запросы на сервер, 1.2.3.4а другой - на запросы 5.6.7.8.

РЕДАКТИРОВАТЬ: (16.03.14)

Этот вопрос был задан несколько лет назад, и я до сих пор не знаю достойного способа сделать это. Позвольте мне попытаться объяснить дальше, потому что люди, кажется, неправильно понимают проблему. Это не то, что легко исправить с помощью прокси-сервера. Я полагаю, что было бы возможно написать обширные правила на прокси-сервере для решения проблем, но это огромное сложное решение, которое должно быть простой проблемой.

Итак, чтобы уточнить:

Есть три веб-сервера. Производство, тестирование и разработка. Каждый запускает мультитенантное приложение, которое настраивает себя на основе имени хоста, используемого для доступа к нему. Концептуально это похоже на систему управления контентом или систему блогов, которая позволяет запускать несколько сайтов с одного экземпляра сервера. Вы просто указываете имя хоста на сервере, и какое бы имя хоста не использовалось для доступа к нему через сопоставление имени хоста HTTP 1.1, это сайт, который он отображает.

Любое решение, которое просто переписывает файл хоста, не работает из-за необходимости одновременного запуска нескольких окон браузера на разных сайтах, производства, разработки, тестирования и т. Д. Так что просто постоянное изменение файла хоста не дает работать, потому что это влияет на все экземпляры браузера. Если вы измените сопоставление для одного браузера, то другие обозреватели теперь также сопоставляются с этим сервером, поэтому любые последующие запросы будут отправляться на неправильный сервер.

Все, что я ищу, - это способ заставить этот экземпляр браузера использовать этот файл хоста, и этот экземпляр браузера использовать этот файл хоста, например, через параметр командной строки. Мне даже все равно, нужно ли мне устанавливать несколько копий браузера.

Это может быть выполнимо с переносным Firefox, так как я думаю, что он использует свои собственные файлы конфигурации для каждой установленной копии, но проблема в том, что стороннее программное обеспечение, используемое для администрирования сайтов, не работает с Firefox (сами сайты делают, но инструменты администратора нет, они нормально работают с Chrome, IE и Opera, однако .. и у меня нет доступа к источнику, чтобы это исправить).

Эрик Фанкенбуш
источник
Большинство людей в вашей ситуации используют пару виртуальных машин WinXP или Ubuntu с разными конфигурациями HOSTS.
digitxp
@digitxp - Да, я уже думал об этом, но я действительно не хочу, чтобы издержки нескольких ВМ и нескольких целых ОС просто просматривали пару сайтов. Очевидно, что если нет другого выбора, это то, что мне, вероятно, придется сделать ..
Эрик Фанкенбуш
Если ничего не помогает : Fiddler Web Debugger (Windows) или GlimmerBlocker и Charles Web Debugging Proxy (Mac) могут переписать запросы на лету ...
Arjan
@Arjan - Прокси будут работать до некоторой степени, но мне придется иметь отдельный экземпляр прокси для каждого экземпляра браузера или менять настройки прокси каждый раз, что еще более раздражает, чем изменение файлов хоста.
Эрик Фанкенбуш
1
Возможно, веб-прокси, такой как squid, позволит вам перенаправить таким образом, чтобы вы могли делать то, что вы хотите, от разрешения DNS? (конечно, веб-прокси может быть настроен для каждого браузера)
barlop

Ответы:

19

Squid решил проблему для меня. Я думаю, что многие прокси-серверы могли бы сделать то же самое.

В частности, мне пришлось установить Squid. Затем измените файл squid.conf так, чтобы он обращался к файлу альтернативных хостов. Это строка, которую вы хотите изменить:

#hosts_file /etc/hosts

В моем случае я использовал hosts_file /etc/hosts-squid. Я создал /etc/hosts-squidфайл и изменил файл hosts-squid так, чтобы он давал мне доступ к новым IP-адресам, которые я хотел получить для данного URL. Это было все, что мне нужно было сделать, чтобы настроить прокси-сервер Squid.

Затем я создал команду для запуска моего браузера с настройками прокси. Я использовал:

chromium-browser --proxy-server=localhost:3128

Выполнение этой команды дает мне работающий экземпляр chromium, который может получить доступ к настройке доменов в файле hosts-squid, который я создал.

Я также смог настроить несколько прокси-серверов, используя несколько экземпляров Squid для доступа к производственному, разрабатываемому и локальному веб-сайту на одном компьютере. Инструкции по запуску нескольких экземпляров Squid находятся здесь . Я также написал сообщение в блоге, объясняющее проблему и решение более подробно.

Дэйв Пэрриш
источник
8

Я считаю, что вы просите настроить виртуальную среду для каждого браузера, которая включает в себя свой собственный файл hosts.

Одним из решений может быть использование Sandboxie для настройки отдельной песочницы, каждая из которых содержит свой собственный файл hosts. Браузер не должен быть установлен в песочницу, чтобы использовать файл hosts, только что запущенный из этой песочницы. Ярлыки на рабочем столе могут быть созданы для запуска браузера из песочницы.

Недостатком будет то, что браузеры будут изолированы от реальной файловой системы, например, при загрузке файлов из Интернета, но Sandboxie включает механизмы для копирования таких файлов вне песочницы.

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

Для пользователей Linux аналогичные продукты:

harrymc
источник
Извините за поздний ответ harrymc. Не ясно, позволяет ли программа предоставлять системные файлы для песочницы, как %SYSTEM32%/Drivers/etc/hostsв Windows и /etc/hostsLinux. Не могли бы вы подтвердить? Я бы предпочел версию для Linux, потому что пару лет назад я провел быструю оценку безопасности Sandboxie в Windows (она не удалась, а отчеты автору остались без ответа).
jww
если Sandboxie поддерживает такие системные файлы, как «песочница» %SYSTEM32%/Drivers/etc/hosts, то это ваши очки. Операционная система была недооценена, и было бы несправедливо скрывать их, если работает Windows / Sandboxie.
jww
AFAIK Sandboxie создает полностью параллельную файловую систему и реестр. Для Linux простой программа песочницы аркозы или , может быть sandfox , но у меня нет опыта работы с ними.
Harrymc
Спасибо, Гарри. У меня проблемы с присуждением вам очков. Я вижу коробку с +50, но не могу нажать на нее. Плюс, я думал, что это стоило 100. Есть идеи (или мне нужно побродить по Мете)?
jww
См. Раздел « Часто задаваемые вопросы о вознаграждении»: из вознаграждения в 100 одна половина была присуждена автоматически через 7 + 1 день без определенного ответа, одна половина была потеряна.
harrymc
4

Вы можете автоматизировать процесс изменения файла хоста с помощью Firefox + HostAdmin.

HostAdmin - это дополнение к Firefox, которое помогает вам изменять файл Hosts, переключать сопоставление IP-адресов доменов. HostAdmin может понять ваш файл Hosts через расширенный синтаксис файла Hosts. Кроме того, HostAdmin автоматически обновляет кэш DNS при каждом изменении файла Hosts, даже вручную.

Пример конфигурации

#==== Project 1
# 127.0.0.1 localhost1
127.0.0.1 localhost2
127.0.0.1 localhost3
#====
#==== Project 2
# 127.0.0.1 localhost1
# 127.0.0.1 localhost2
# 127.0.0.1 localhost3  

Более подробная информация на https://addons.mozilla.org/en-US/firefox/addon/hostadmin/

Несколько экземпляров

Для одновременного и независимого запуска двух экземпляров браузера Firefox в Linux создайте несколько программ запуска с помощью следующего скрипта. Также установите плагин во всех Firefox.

Firefox 1

#!/bin/bash
th="/home/$USER/tmp/p1"
mkdir -p "$th"
export HOME="$th"
firefox -no-remote

Firefox 2

#!/bin/bash
th="/home/$USER/tmp/p2"
mkdir -p "$th"
export HOME="$th"
firefox -no-remote  

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

Тотти
источник
1
Он запрашивает 2 браузера, использующих 2 хост-файла одновременно .
Harrymc
@harrym c обновлен.
Тотти
2

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

По крайней мере, это сведет к минимуму работу, которую вы делаете.

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

Крис Харрод
источник
Я не могу переименовать их, потому что веб-приложения зависят от имени хоста для отображения правильного контента. Кроме того, причина, по которой я хочу это сделать, заключается в том, что я могу запускать несколько браузеров одновременно, и один из них может перейти на этапы, а другой - к dev. Вы не можете сделать это путем замены файлов хостов.
Эрик Фанкенбуш
@MystereMan: Если вы говорите о META BASE, просто выполните обнаружение браузера на стороне сервера. У вас не должно быть своего собственного имени хоста в любом другом URL-адресе ...
Тамара Вийсман
@ TomWij - Нет, я не говорю о META BASE. Я говорю о виртуальном хостинге на основе хоста, а не на основе IP. Поле имени хоста определяет, какой сайт доступен.
Эрик Фанкенбуш
@MystereMan: Тогда ваш первый комментарий к этому ответу не имеет никакого смысла. Поскольку вы говорите о «веб-приложении, отображающем правильный контент», я не понимаю, какое отношение к этому имеют виртуальные хосты?
Тамара Вийсман
@ TomWij - у нас есть мультитенантная система CMS, которая размещает несколько сайтов на одном сервере с одним IP. Чтобы просмотреть любой данный сайт, вы должны использовать имя хоста, в противном случае вы получите доступ только к экземпляру по умолчанию. Мне нужно переключаться между производственной, промежуточной и разрабатываемой версиями этого сервера, что означает на лету изменение сопоставления доменных имен и их IP-адресов. Я могу сделать это в файле hosts, но это меняет ситуацию глобально, поэтому я не могу открыть одновременные копии постановки и производства в двух разных экземплярах браузера.
Эрик Фанкенбуш
1

Privoxy может быть использован для этой цели.

Тамара Вийсман
источник
Как именно Privoxy будет работать для этой цели? Похоже, это просто еще один локальный прокси-сервер, ни один из которых не работает, потому что в большинстве браузеров вы не можете определить прокси для каждого экземпляра ... вы можете определить глобальный прокси-сервер для всех экземпляров
Эрик Фанкенбуш
@MystereMan: Это проксирует ваши запросы и таким образом манипулирует запросами в других запросах, это довольно легко сделать . Вы бессмысленно говорите о прокси-серверах: Mirosoft Internet Explorer (GUI), Mozilla Firefox (GUI), Google Chrome (CLI --proxy-server =), Apple Safari (GUI), Opera (GUI) и любой другой браузер. (GUI или CLI) позволяет вам установить собственный прокси-сервер ...
Тамара Вийсман
@TomWij - Нет. IE, Chrome и Safari используют глобальную настройку прокси-сервера в «Настройках Интернета». Это означает, что если вы измените его в одном веб-браузере, он изменится во всех из них. Firefox имеет свои собственные настройки для этого, но, к сожалению, я не могу использовать Firefox, потому что он не работает с CMS, которую мы используем (все остальное работает).
Эрик Фанкенбуш
@Mystere Man: Неверно. Перестаньте повторять свои мысли и посмотрите, какую конфигурацию предоставляет каждый отдельный браузер. Если вы не тратите усилия на то, чтобы действительно прочитать документацию, то вам никогда не удастся решить вашу проблему, поскольку вы просите что-то слишком конкретное, что не относится к остальным людям. Как я уже говорил, но вы, похоже, не читали: любой браузер позволяет вам установить прокси-сервер для этого браузера. Google Chrome предоставляет параметр CLI--proxy-server= .
Тамара Вийсман
1
Хм, я могу ошибаться насчет Safari, так как не использовал его в течение достаточно долгого времени. Но я думаю, что я неправильно вас понял, зачем вам использовать разные прокси-серверы в каждом браузере? Я запутался, потому что что-то вроде «x.com = production; stage.x.com = staging; dev.x.com = development» не сработало бы для вас, если бы на сервере было перенаправлено только один IP-адрес и заголовок узла ...
Тамара Вийсман
1

Не знаю, достаточно ли это удобно для вас, но одним из возможных решений будет установка IIS на машину с браузерами и предоставление серверных сценариев (таких как ASP.net, PHP, Ruby ...), которые изменяют hostsфайл и затем перенаправить на фактическую страницу. В ваших браузерах вы затем создаете закладку для этого скрипта, например, http://localhost/config_ie.rbкоторая изменяет hostsфайл (конечно, требует правильных разрешений для этого файла), а затем выполняете перенаправление 302 на реальную страницу.

Михаил Кремсер
источник
1
Часть, которую большинство людей не понимают по этому поводу, заключается в том, что для эффективной работы необходимо иметь возможность запускать несколько браузеров одновременно, используя различные сопоставления хоста / ip. Например, мне нужно, чтобы мои производственные и тестовые и отладочные экземпляры были открыты в разных экземплярах браузера. Каждый из них должен использовать одно и то же имя хоста (потому что отображение имени хоста HTTP 1.1 отображает правильный сайт на основе имени хоста). Если вы просто измените файл хоста, то каждый экземпляр браузера теперь сопоставляется с новым сервером, а не только с одним его экземпляром.
Эрик Фанкенбуш
@Erik Funkenbusch: Спасибо за разъяснения. Что ж, мои оставшиеся идеи: a) Одна концепция будет использовать что-то вроде виртуализации файловой системы, которая называется «Перенаправление данных» в Windows и обычно используется для UAC для поддержки устаревших приложений, которые записывают данные в конфиденциальные пути. Может быть, есть какой-то вариант, который позволяет вам использовать его в своих целях. Тогда вы можете иметь собственный hostsфайл для каждого процесса. b) Локальный перехват DNS: запрос от «iexplore.exe» и т. д. может обрабатываться в соответствии с предоставленным вами списком. - Есть идея, которая тебе нравится?
Майкл Кремсер
1

Если полной виртуальной машины слишком много, может подойти решение на основе контейнера.

Если мы говорим о Linux здесь, lxcможет быть возможным решением.

Кроме того, даже полная виртуальная машина с минимальным X11-linux не такая большая (максимум 2 ГБ диска) и не потребляет столько ресурсов (максимум 512 МБ ОЗУ) с современным оборудованием ...

LubuntuVM может сделать здесь.

Nils
источник
Я нахожу ОЗУ и обработка в порядке. Общий диск - это то, что наносит вред системе.
jww
0

Одним из относительно простых решений (но, возможно, немного ресурсоемким) было бы иметь на своем хосте несколько виртуальных машин. Каждая виртуальная машина имеет свой собственный файл хоста.

Таким образом, у вас будет одна виртуальная машина для промежуточной среды, одна для Prod и т. Д.

Пит
источник
Возможно, вам следует прочитать первые два комментария под вопросом. Это было решено 4 года назад.
Эрик Фанкенбуш
На самом деле я видел комментарий, но только после того, как опубликовал этот ответ. Но я все еще думаю, что имеет смысл иметь его как отдельный ответ (в отличие от просто комментария), так как он может помочь другим людям с такой же проблемой.
Пит
Две виртуальные машины могут нанести вред большинству рабочих станций из-за общего узкого места на диске. Я слегка страдаю от одной открытой виртуальной машины (одна - современный Mac Mac Book Pro с двумя четырехъядерными процессорами; вторая - современный ноутбук ASUS с одним четырехъядерным процессором). Две виртуальные машины были бы болезненными.
jww