如何配置和访问同一网站/域名的本地和远程版本?

如何配置和访问同一网站/域名的本地和远程版本?

我正在开发一个客户的网站,该网站目前托管在外部远程服务器上。我将该网站的副本下载到我的本地计算机,该计算机运行在 Arch Linux 上设置的“LAMP 堆栈”,用作开发版本。

该网站使用 WordPress 构建,因此该网站的域名存储在数据库中,每当网站上生成链接时都会使用该域名。因此,为了避免编辑数据库,我在 Apache 中使用虚拟主机配置了该网站,并将服务器的域名设置为与“实时”网站的域名相同,例如在我的“vhosts.conf”文件中...

ServerName    live-domain-name.co.uk
ServerAlias   *.live-domain-name.co.uk


我还将域名添加到我的本地“hosts”文件中,如下所示:

127.0.0.1    live-domain-name.co.uk


我希望能够访问两个都至少这样,如果我正在运行 Apache,我就可以获取该网站的本地副本,但如果 Apache不是运行后我得到了该网站的‘真实’版本!


我已将127.0.0.1第一个“名称服务器”条目添加到我的/etc/resolv.conf文件中,第二个是我的互联网路由器的 IP,第三个是 Goolge 的公共 DNS 服务器之一。但是,即使 Apache 没有运行,$ ping ...该域的 IP 仍然显示为 127.0.0.1!


我猜我需要某种 DNS 解析器,它会首先检查我的本地主机,但如果找不到站点(即 Apache 没有运行),那么它会回退到使用其他 DNS 服务器之一!——只是我对安装和配置 DNS 服务器/转发器一无所知...

有人能帮帮我吗?

答案1

我认为@piercedRichard 建议的方法(即当 apache 关闭时从 /etc/hosts 中删除条目)是可行的......

但我也能想到一种扭曲的方法(使用 iptables)将 live-domain-name.co.uk 的 ip 地址路由回本地主机。我认为这会更加可靠 - 因为 DNS 解析将被缓存,除了修复 /etc/hosts 之外,您还必须在操作系统层和某些浏览器(例如 Firefox)中刷新 dns“缓存”。对 iptables 的更改应该是即时的...

也许类似于(重定向到本地):

iptables -t nat -A OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80

删除规则(停止重定向):

iptables -t nat -D OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80

至于检测 apache 是否启动 - 将 iptables 规则放入 /etc/init.d/apache2 文件中 -
或者编写一个尝试连接到 localhost:80 的脚本,如果可以,则创建规则,否则删除规则...

答案2

大多数操作系统会hosts在尝试查找 DNS 服务器之前先从其文件进行解析。如果您从中删除(或注释掉)该行hosts,它将查询 DNS 服务器并发现它是一个远程 IP。

hostname如果设置为相同,您可能还需要更改,因为hostname也可能用于解析 IP(至少在 Linux 中的一些系统中)。

hosts.conf 手册页- 查看有关该order指令的更多信息。

相关内容