浏览器具有自己的主机文件?


36

我有许多临时服务器和测试服务器,需要不断修改主机文件才能访问(它们取决于域名,因此我必须更改主机文件才能使它们工作)。

我觉得这很烦人。我想为我要使用的每种网站设置某种便携式浏览器。是否有任何版本的图形网络浏览器(包括基于其他浏览器渲染引擎的浏览器)可以做到这一点?

这样,如果我要测试暂存,我可以简单地启动已经配置为可以暂存的实例。

有任何想法吗?

编辑:重要的功能是能够同时运行两个浏览器,两个浏览器都可以运行some-address.com,但是一个浏览1.2.3.4器将请求定向到服务器,另一个浏览器将请求定向到服务器5.6.7.8

编辑:(3/16/14)

几年前曾问过这个问题,但我仍然不知道这样做的体面方法。让我尝试进一步解释,因为人们似乎误解了这个问题。仅使用代理服务器就无法轻松修复该问题。我想也许可以在代理服务器中编写广泛的规则来解决问题,但这对于应该是一个简单问题的解决方案来说是一个巨大的复杂解决方案。

所以要澄清一下:

有三个Web服务器。生产,测试和开发。每个服务器都运行一个多租户应用程序,该应用程序根据用于访问它的主机名进行自定义。从概念上讲,这类似于允许多个站点在同一服务器实例上运行的内容管理系统或博客引擎。您只需将主机名指向服务器,然后使用该主机名通过HTTP 1.1主机名映射访问该主机名即可。

任何简单地重写宿主文件的解决方案都无法使用,因为需要同时在不同的站点,生产,开发,测试等位置运行多个浏览器窗口。因此,不断地更改宿主文件并不能实现之所以起作用,是因为它会影响所有浏览器实例。如果更改一个浏览器的映射,则其他浏览器现在也将映射到该服务器,因此任何后续请求都将发送到错误的服务器。

我正在寻找的是一种强制此浏览器实例使用此主机文件,以及该浏览器实例使用该主机文件的方法,例如通过命令行参数。我什至不在乎是否需要安装浏览器的多个副本。

这对于firefox Portable可能是可行的,因为我认为它在每个已安装的副本中使用自己的配置文件,但是问题是,用于管理站点的第三方软件不适用于firefox(站点本身可以​​,但是管理工具不能,但是它们可以与chrome,IE和Opera配合使用,但是..并且我无权修复此问题。


您遇到的大多数人都使用不同的HOSTS配置运行几个WinXP或Ubuntu虚拟机。
digitxp 2010年

@digitxp-是的,我已经想到了这一点,但是我真的不希望多个VM和几个整个OS的开销只是浏览几个站点。显然,如果没有其他的选择,这就是我可能会不得不做..
埃里克Funkenbusch

如果其他所有方法均失败:Fiddler Web调试器(Windows)或GlimmerBlockerCharles Web调试代理(Mac)可以即时重写请求...
Arjan 2010年

@Arjan-代理在某种程度上可以工作,但是我将不得不为每个浏览器实例设置一个单独的代理实例,或者每次更改代理设置,这更会使更改主机文件更为烦人。
Erik Funkenbusch 2010年

1
也许像鱿鱼这样的Web代理,将允许您以一种您希望通过DNS解析完成的方式进行重定向?(当然,可以在每个浏览器的基础上配置Web代理)
barlop 2010年

Answers:


19

乌贼为我解决了这个问题。我认为许多代理服务器都可以这样做。

具体来说,我必须安装Squid。然后更改squid.conf,以便它访问备用主机文件。这是您要更改的行:

#hosts_file /etc/hosts

就我而言,我使用了hosts_file /etc/hosts-squid。我创建了/etc/hosts-squid文件并更改了hosts-squid文件,以便可以访问给定URL所需的新IP地址。这就是我配置Squid代理服务器所需要做的。

然后,我创建了一个命令以使用代理设置启动浏览器。我用了:

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

运行该命令可以有效地给我一个运行中的Chrome实例,该实例可以访问我创建的hosts-squid文件中的域设置。

我还能够使用多个Squid实例设置更多代理服务器,以访问同一台计算机上的生产,开发和本地网站。有关如何运行多个Squid实例的说明在此处。我还写了一篇博客文章,更详细地解释了问题和解决方案。


8

我相信您要求为每个包含其自己的主机文件的浏览器设置虚拟环境。

一种解决方案可能是使用Sandboxie设置单独的沙箱,每个沙箱都包含自己的主机文件。无需从沙箱内部安装浏览器就可以使用hosts文件。可以创建桌面快捷方式,以从沙箱中启动浏览器。

缺点是,例如,当从Internet下载文件时,浏览器将与真实文件系统隔离,但是Sandboxie包含将这些文件复制到沙箱外部的机制。

不幸的是,只能在付费版本的Sandboxie中使用在多个沙箱中同时运行程序的功能(15欧元,另加一年在家使用的许可证税)。可以使用免费版本进行可行性测试。

对于Linux用户,类似的产品是:


对不起,我延迟了回复。目前尚不清楚该程序是否允许像%SYSTEM32%/Drivers/etc/hostsWindows和/etc/hostsLinux 一样提供每个沙盒系统文件。你能确认吗?我更喜欢Linux版本,因为几年前我在Windows上对Sandboxie进行了快速安全评估(失败了,并且未提交给作者的报告)。
jww

如果Sandboxie支持按沙盒装的系统文件,例如%SYSTEM32%/Drivers/etc/hosts,那么这些就是您的了。操作系统配置不充分,如果使用Windows / Sandboxie,则不愿保留它们。
jww

AFAIK Sandboxie创建一个完全并行的文件系统和注册表。对于Linux一个简单的沙箱计划是长石砂岩也许sandfox,但我与他们没有经验。
harrymc

谢谢harrymc。我在给您积分时遇到麻烦。我看到带有+50的框,但无法单击它。另外,我认为它值100。有什么想法(或者我需要漫步到Meta)?
jww

请参阅赏金常见问题解答:在100的赏金中,有7 + 1天未指定答案后自动奖励了一半,其中一半丢失了。
harrymc

4

您可以使用firefox + HostAdmin自动执行更改主机文件的过程

HostAdmin是一个Firefox插件,可以帮助您修改Hosts文件,切换域IP映射。HostAdmin可以通过增强的Hosts文件语法来了解您的Hosts文件。此外,无论何时更改主机文件,HostAdmin都会自动刷新DNS缓存,甚至是手动刷新。

配置示例

#==== 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/

多实例

要在Linux中同时并独立运行firefox浏览器的两个实例,请使用以下脚本创建多个启动器。还要在所有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 在同一时间
哈里麦克2014年


@harrym c已更新。
托蒂2014年

2

我知道这不是您要的,但是一个临时的解决方案是写一个批处理脚本来交换主机文件,然后启动浏览器。

至少可以减少您正在做的工作。

或者,您可以仅在hosts文件中为这些服务器命名完全不同的名称,因此您不必一开始就进行切换。


我无法重命名它们,因为Web应用程序依赖主机名来呈现正确的内容。另外,我希望这样做的原因是,我可以同时运行多个浏览器,并且一个可以进行升级,另一个可以进行开发。您不能通过交换主机文件来做到这一点。
Erik Funkenbusch

@MystereMan:如果您正在谈论META BASE,则只需在服务器端进行浏览器检测即可。您不应在任何其他URL中拥有自己的主机名...
Tamara Wijsman

@TomWij-不,我不是在谈论META BASE。我说的是基于主机的虚拟主机,而不是基于IP的主机。主机名字段确定访问哪个站点。
Erik Funkenbusch 2011年

@MystereMan:那么您对此答案的第一条评论毫无意义。当您谈论“ Web应用程序呈现正确的内容”时,我看不到虚拟主机与之有什么关系?
塔玛拉·威斯曼

@TomWij-我们有一个多租户CMS系统,该系统在单个服务器上使用单个IP托管多个站点。要查看任何给定的站点,您必须使用主机名,否则,您仅访问默认实例。我需要在该服务器的生产版本,暂存版本和开发版本之间进行切换,这意味着要动态更改域名到其IP地址的映射。我可以在hosts文件中执行此操作,但这会全局更改操作,因此无法在两个不同的浏览器实例中同时打开暂存和生产副本。
Erik Funkenbusch

1

可以将 Privoxy用于此目的。


为此,Privoxy到底将如何工作?它看起来像只是一个本地代理服务器,其中没有工作,因为大多数浏览器,你不能定义每个实例的代理..你只能定义全局代理的所有实例
埃里克Funkenbusch

@MystereMan:它将代理您的请求,从而将请求处理为其他请求,这很容易做到。您在谈论代理服务器是胡说八道:Mirosoft Internet Explorer(GUI),Mozilla Firefox(GUI),Google Chrome(CLI --proxy-server =),Apple Safari(GUI),Opera(GUI)和任何其他浏览器(GUI或CLI)允许您设置自己的代理服务器...
Tamara Wijsman

@TomWij-编号IE,Chrome和Safari都使用“ Internet设置”中的全局​​代理服务器设置。这意味着,如果您在一个Web浏览器中进行更改,则所有浏览器都会更改。Firefox为此有其自己的设置,但是很遗憾,我不能使用Firefox,因为它不适用于我们使用的CMS(其他所有功能)。
Erik Funkenbusch'2

@Mystere Man:不正确。停止重复您的想法,而是查看每个单独的浏览器为您提供的配置。如果您不花力气真正阅读文档,那么您将永远无法解决问题,因为您要问的是过于具体的问题,不适用于其他人。就像我之前说过的,但是您似乎没有读过:任何浏览器都允许您为该浏览器设置代理服务器。Google Chrome提供了CLI参数--proxy-server=
塔玛拉·威斯曼

1
嗯,我可能对Safari错了,因为我已经有一段时间没有使用它了。但是我想我误会了您,为什么要在每个浏览器中都使用不同的代理服务器?我很困惑,为什么在服务器上只有一个IP和主机头重定向的情况下,诸如“ x.com =生产; stage.x.com =登台; dev.x.com =开发”之类的方法不只对您有用...
塔玛拉·维斯曼

1

不知道这是否对您足够方便,但是一种可能的解决方案是使用浏览器在计算机上安装IIS,并提供更改hosts文件和文件的服务器端脚本(如ASP.net,PHP,Ruby ...)。然后重定向到实际页面。然后,在浏览器中,为该脚本创建一个书签,例如http://localhost/config_ie.rb,该书签更改hosts文件(当然,需要该文件的正确权限),然后对实际页面执行302重定向。


1
大多数人对此不了解的部分是,为了有效地工作,您需要能够使用不同的主机/ IP映射同时运行多个浏览器。例如,我需要在不同的浏览器实例中同时打开生产,测试和调试实例。每个主机都必须使用相同的主机名(因为HTTP 1.1主机名映射根据主机名映射正确的站点)。如果仅更改主机文件,则浏览器的每个实例现在都将映射到新服务器,而不仅仅是单个实例。
Erik Funkenbusch 2014年

@Erik Funkenbusch:感谢您的澄清。好吧,我剩下的想法:a)一个概念是使用文件系统虚拟化之类的东西,在Windows中称为“数据重定向”,通常用于UAC,以支持将数据写入敏感路径的旧应用程序。也许有些选项可以让您将其用于自己的目的。然后,您可以hosts为每个进程创建一个自定义文件。b)本地DNS拦截:可以根据您提供的某些列表来处理来自“ iexplore.exe”等的请求。-有喜欢的想法吗?
Michael Kremser 2014年

1

如果完整的VM太多,则可以使用基于容器的解决方案。

如果我们在这里谈论linux,lxc可能是一个可行的解决方案。

除此之外-即使使用最小的X11-linux的完整VM也没有那么大(最大2 GB磁盘),并且使用当今的硬件也不会消耗那么多的资源(最大512 MB RAM)...

一个Lubuntu虚拟机可以在这里做。


我发现RAM并且处理正常。共享磁盘是使系统瘫痪的原因。
jww 2014年

0

一个相对简单的解决方案(但可能会占用一些资源)会在主机中运行一些虚拟机。每个虚拟机都有自己的主机文件。

因此,您将有一个用于暂存环境的虚拟机,一个用于生产环境的虚拟机,等等。


也许您应该阅读问题下的前两个评论。这是4年前解决的。
Erik Funkenbusch 2014年

实际上,我确实看到了评论,但直到发布此答案后才看到。但我仍然认为将其作为单独的答案(而不是仅是评论)是有意义的,因为它可以帮助其他遇到相同类型问题的人。
皮特2014年

由于共享磁盘瓶颈,两个VM会使大多数工作站瘫痪。我轻度地打开了一个虚拟机(一个是具有双四核的现代Mac Mac Book Pro;另一个是具有单四核的现代ASUS笔记本电脑)。两个虚拟机会很痛苦。
jww 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.