我有一个本地 Apache 服务器正在运行,它被定义/etc/hosts为“apache”。所以我经常打开这样的页面:
http://apache/website/
Run Code Online (Sandbox Code Playgroud)
通常,这可以正常工作。但是,由于我使用的是更新的 Chrome 浏览器,有时浏览器会认为我输入的 URL 不是 URL,而是实际搜索,因此它会加载我的默认搜索引擎并尝试查找此 URL。它通常(但并非总是)在地址栏下方显示一个链接,内容为Did you mean to go to http://apache/website?。这很好,但很烦人,必须点击这里而不是直接去那里。是什么让 Chrome 有这种行为?我可以解决这个问题吗?
我在 Arch Linux 上使用hostsblock和dnsmasq来阻止一些网站,其中之一是facebook.com和www.facebook.com。
我知道一切正常,因为对facebook.com(或www.facebook.com)的简单 ping返回 127.0.0.1。此外,如果我从 Midori 访问这些网站,则会返回一个空白页面(这是预期的行为,因为我正在使用kwakd守护程序在本地主机上返回空白页面)。
只有 Chromium 似乎绕过了我的阻止列表。从它访问 facebook.com 让我直接进入 facebook 主页。
自时间开始清理所有内容(Ctrl+Shift+Delete)并重新启动 Chromium 后,我得到了所需的行为(= 无法访问 Facebook)。
尽管过了一段时间(我不确定是什么原因造成的),Chromium 再次忽略了我的本地 dnsmasq DNS 并成功访问了 facebook 主页。
我阅读了一些关于 Chromium 的 DNS 查询的缓存和预取的内容,但我不确定如何禁用它。
问题是:为什么 Chromium 会绕过我的本地 DNS,我该怎么做才能阻止它?
我有许多临时和测试服务器,我需要不断修改我的主机文件才能访问(它们取决于域名,所以我必须更改主机文件才能使它们工作)。
我觉得这很烦人。我想为我想要使用的每种网站设置某种便携式浏览器。是否有任何版本的图形 Web 浏览器(包括基于其他浏览器渲染引擎的浏览器)可以执行此操作?
通过这种方式,如果我想测试暂存,我可以简单地启动已经配置为使用暂存的实例。
有任何想法吗?
编辑:重要的功能是能够同时运行两个浏览器,都浏览到some-address.com,但一个浏览1.2.3.4器将请求定向到服务器 ,另一个浏览器将请求定向到服务器5.6.7.8。
编辑:(3/16/14)
这个问题是几年前提出的,我仍然不知道这样做的体面方法。让我试着进一步解释一下,因为人们似乎误解了这个问题。这不是仅通过使用代理服务器就可以轻松解决的问题。我想可能可以在代理服务器中编写大量规则来解决问题,但对于一个简单的问题来说,这是一个非常复杂的解决方案。
所以要澄清:
共有三个 Web 服务器。生产、测试和开发。每个都运行一个多租户应用程序,该应用程序根据用于访问它的主机名进行自定义。从概念上讲,这类似于允许多个站点在同一个服务器实例上运行的内容管理系统或博客引擎。您只需将主机名指向服务器,通过 HTTP 1.1 主机名映射访问它的主机名就是它显示的站点。
任何简单地重写主机文件的解决方案都不起作用,因为需要同时运行多个浏览器窗口到不同的站点、生产、开发、测试等......所以简单地不断更改主机文件不会工作,因为它会影响所有浏览器实例。如果您更改一个浏览器的映射,那么其他浏览器现在也会映射到该服务器,因此任何后续请求都将转到错误的服务器。
我正在寻找的是一种强制此浏览器实例使用此主机文件以及该浏览器实例使用该主机文件的方法,例如通过命令行参数。我什至不在乎是否需要安装浏览器的多个副本。
这对于 firefox 便携式可能是可行的,因为我认为它为每个安装的副本使用自己的配置文件,但问题是用于管理站点的第三方软件不适用于 firefox(站点本身可以,但管理工具不,它们在 chrome、IE 和 Opera 上运行良好,但是……我无法访问源代码来修复它)。
以下是我的/etc/hosts.
我想知道最后一个条目 ( fe80::1%lo0 localhost)是什么。
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
Run Code Online (Sandbox Code Playgroud) 如何设置 Chrome 以在本地而不是从标准 etc/hosts 文件中引用主机名查找?
调试网站时,有时在C:\Windows\system32\drivers\etc\hosts中设置条目将某些域替换为 localhost很有用,从而使我可以测试网站或域的动态版本与现场实际站点冲突。
我能否以模拟和简化此过程的方式设置 Google Chrome?
我不会修改浏览器实例以使其表现得好像 etc/hosts 已被修改,尽管即使这样在扩展中也可能存在太大的安全风险。
我的 /etc/hosts 文件如下所示:
127.0.0.1 localhost
10.20.7.67 testsitealpha.dev
othersite.dev testsitebeta.dev
Run Code Online (Sandbox Code Playgroud)
前两个工作。最后一个没有。为什么不?我如何使它工作?我这样做的原因是因为我有一个测试服务器(othersite.com),它在本地网络上,但它的 ip 可能会有所不同。例如,一天 10.20.7.98,另一天 10.20.7.35,等等。
那么,如何让我的系统始终将 testsitebeta.dev 解析为与 othersite.dev 相同的 IP?
我正在尝试访问https://get.dev 之类的网站,但没有加载网站,而是出现“解析主机”消息,然后我收到“无法访问此站点 get.dev 的服务器 IP 地址可以找不到。DNS_PROBE_FINISHED_NXDOMAIN”。
这是到目前为止我所做的:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
Run Code Online (Sandbox Code Playgroud)
brew uninstall dnsmasq)。删除后,我重新启动了计算机。ping: cannot resolve get.dev: Unknown host我想知道我还能做些什么来调试它并使其工作?
它在旧配置中工作了一段时间,但由于某种原因停止工作。
这是我的 Mountain Lion MacBook Air 中的 /etc/hosts 文件:
127.0.0.1 reddit.com www.reddit.com
127.0.0.1 facebook.com www.facebook.com
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
Run Code Online (Sandbox Code Playgroud)
这会阻止 Reddit,但不会阻止 Facebook。
我试过刷新机器的 DNS 缓存(“sudo killall -HUP mDNSResponder”),浏览器(FF 和 Chrome),我试过重新启动计算机。
我已经按照本文的建议将条目移到文件的顶部,但之前它在底部时也不起作用。每次它都会阻止 Reddit 但不会阻止 Facebook。
我正在尝试在 Windows 8 Pro 中编辑我的主机文件。
当我C:\Windows\System32\Drivers\etc\hosts在Notepad++或任何其他文本编辑器中打开,进行更改并尝试保存时,我收到一个对话框,告诉我“保存失败:请检查此文件是否在另一个程序中打开。”
我想不出什么会使用它(除了浏览器、IIS和Windows Defender)。我从未在 Windows 7 中遇到过这个问题。我使用Process Explorer尝试识别当前正在使用主机文件的任何进程,但是当我在 Process Explorer 中搜索“句柄或 DLL 子字符串”“主机”时,它没有“不返回任何东西。我环顾了 Process Explorer,看看是否还有其他方法可以搜索消耗该文件的进程,但没有任何运气。
我还尝试过简单地停止 Windows Defender 服务并停止 WWW 服务。
我刚刚从小牛队升级到优胜美地,现在curl看不到环回主机名。
设置一个简单的 http 服务器来测试:
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Run Code Online (Sandbox Code Playgroud)
现在我可以在 chrome 中点击 localhost:8000。我什至可以得到它。但是在 curl 中,会发生这种情况:
$ curl localhost:8000
curl: (7) Failed to connect to localhost port 8000: Connection refused
Run Code Online (Sandbox Code Playgroud)
但是,这有效:
$ curl 127.0.0.1:8000
Run Code Online (Sandbox Code Playgroud)
我阅读了有关 wget proxy settings 的答案,但没有帮助,因为它有效:
$ wget --proxy=off localhost:8000
Run Code Online (Sandbox Code Playgroud)
这真的很令人沮丧,因为我的/etc/hosts文件中列出了几个不同的环回主机名,因此我可以在本地开发应用程序,而且我习惯于使用 curl 调试它们。
我已经尝试过 osx 附带的 curl 版本:
$ curl --version
curl 7.37.1 (x86_64-apple-darwin14.0) libcurl/7.37.1 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap …Run Code Online (Sandbox Code Playgroud) hosts-file ×10
dns ×2
macos ×2
browser ×1
chromium ×1
curl ×1
dnsmasq ×1
domain-name ×1
ipv6 ×1
linux ×1
localhost ×1
networking ×1
osx-yosemite ×1
portable ×1
webserver ×1
windows-8 ×1