我不知道从哪里开始,所以如果这个话题已经被讨论过了,我提前表示抱歉。
我通常使用笔记本电脑作为开发服务器来开发网站,最近我需要使用各种可以通过 wifi 连接的移动设备来测试网站。由于没有真正的 AP,我使用笔记本电脑的无线网卡设置了一个临时网络,这些设备可以正确浏览互联网并访问笔记本电脑的 Web 服务器。设置如下:
- 子网:192.168.1.0/24
- 互联网网关(有线 adsl 路由器/调制解调器):192.168.1.1
- 笔记本电脑:192.168.1.64(eth0,如果连接到网关则为有线)和 192.168.1.32(eth1,如果桥接到 eth0 则为 wifi)
- 移动设备(所有设备都一样,为了简单起见,我每次只使用其中一个):192.168.1.11,默认网关为 192.168.1.1
现在,如果我从移动设备打开 192.168.1.32 或 192.168.1.64,我就可以正确获取 Apache 配置的默认主机。但是,出于许多实际原因,我通常使用虚拟主机,其中之一是 Drupal 对多站点的特殊实现。对于那些不知道它如何工作的人来说,Drupal 会获取请求的主机名并在其 sites/ 子目录中搜索适当的配置文件。因此,例如,假设我请求 www.example.com,那么 Drupal 会在以下目录中搜索配置文件:
sites/www.example.com/
sites/example.com/
sites/com/
sites/default/
因此,我决定采用以下虚拟主机样式:如果我正在处理的网站可以使用 www.example.com 访问,我会设置一个 sites/www.example.com/ 目录,并为 local.www.example.com 创建虚拟主机,这样 Drupal 就可以轻松找到它。有人告诉我,从 DNS 的角度来看,这不是最理想的,因为我必须为 example.com 创建权威条目,并且只有当我应该访问本地副本时才打开 Bind,这很奇怪。但是,如果这是我唯一可以遵循的路径,那么我仍然会遇到 Bind 配置的一些问题,因为我找不到任何指南以清晰、新手友好的方式告诉我如何设置这样的条目。另一方面,我想知道我是否可以为本地设置一个权威条目,这样我就可以访问 www.example.com.local,并以某种方式(我甚至不知道这是否可能)告诉 Apache 将 www.example.com 而不是 www.example.com.local 放在相关的环境变量中。
无论如何,我还有最后一个问题:当我以高详细程度在调试模式下启动 Bind,并将 192.168.1.32 作为设备的主 DNS 时,输出并没有提到设备向 Bind 发出的请求,所以我甚至不确定它是否发挥了作用。
正如你所看到的,我对这些问题完全是个新手,但我渴望学习,所以任何帮助/指点都会受到感谢。
答案1
抱歉回复晚了,经过多次试验,我终于找到了解决方案。首先,这是我用于本地域的区域文件:
$TTL 1800
@ IN SOA local. root.porto.local. (
2010061500 ; serial
7200 ; refresh
3600 ; retry
604800 ; expire
1800 ; default_ttl
)
NS porto.local.
$ORIGIN local.
porto IN A 192.168.1.32
www IN A 192.168.1.32
我可以添加类似的行
www.example.com IN A 192.168.1.32
这导致能够查询 www.example.com.local,这是一方面。
为了解决 Drupal 的怪异行为,我实际上找到了一个解决方案,它不会阻止我在处理本地副本时使用真正的远程 www.example.com,只是我必须为 local.www.example.com 设置一个区域,并为 www 设置主机行,这会导致 www.local.www.example.com 变得奇怪而长......坦率地说,这有点太过分了,无法保持我的心理健康。我将选择本地。方式和 s/.local// 我要部署到生产服务器的数据库转储。
感谢所有回复的人。
答案2
另一个解决方案是在你的台式机上设置一个小代理(你在那里开发和托管你的网站,使用多个虚拟主机)。例如,在 Windows 上,你可以使用Fiddler。如果您运行的是 Mac OS X 或 Linux,您可以尝试查尔斯(但它不是免费的)。
在 Fiddler 下,你必须激活该选项“允许远程计算机连接”在“连接”选项窗口的选项卡。
然后,您必须配置您的移动设备以使用代理。这可以在移动设备的 WiFi 设置中轻松完成。
我希望您在本地 Web 服务器上创建 VirtualHost 时也能编辑文件,hosts
以便本地浏览网站。现在,您希望您的移动设备也能这样做。
这就是代理发挥作用的地方。代理能够读取您的本地 hosts 文件(C:\Windows\System32\drivers\etc\hosts
或/etc/hosts
),这意味着您的移动设备将自动路由到您的本地 Web 服务器。
该解决方案的另一个有趣之处在于,您可以模拟慢速流量网络并清楚地看到您的移动设备实际下载的内容(在使用媒体查询和响应式图像时非常有用)。
我发现这篇文章很好地解释了如何做到这一点:在移动设备上使用本地主机名测试 Mac OS X 网站
答案3
好吧,老实说,你可能把你的情况想得太复杂了,你不需要真的需要 bind,因为您只需输入192.168.1.32 example.com
主机文件即可。如果您想了解如何使用 bind,请尝试查看在 NSlookup 中查找该域时会发生什么,并查看它告诉您什么,这会很有帮助。