我正在尝试为由 vagrant(虚拟盒)运行的本地网站创建别名,因此我想通过/etc/hosts
文件将来自 site.ru 的所有请求重定向到 192.168.10.10/site.ru。在 hosts 文件中,我有以下内容:
...
192.168.10.10/site.ru site.ru
但是它并没有像我想要的那样工作。当我访问 site.ru 时,我出现在“真实”网站中。我希望有人能理解我并回答我的问题。
我做错了什么?
更新: 解决方案:如何在 nginx 中设置大量动态虚拟主机?
答案1
您当然可以使用 Ubuntu 的文件将主机名指向 LAN 上的 IP 地址hosts
,但它不支持您使用的特定语法。从man hosts
:
此文件是一个简单的文本文件,将 IP 地址与主机名关联起来,每个 IP 地址一行。对于每个主机,应该有一行包含以下信息:
IP_address canonical_hostname [aliases...]
Ubuntu 中的 hosts 文件不指向主机名其他主机名,但仅限 IP 地址。
因此,不要这样写:
192.168.10.10/site.ru site.ru
你应该这样写:
192.168.10.10 site.ru
这将导致site.ru
被解析为,192.168.10.10
而不是通过 DNS 解析为的任何内容。
然而,这可能会或可能不会有效地引导与域名(概念上)相关的所有流量site.ru
。特别是,这通常不足以使像 192.168.10.10 这样的域www.site.ru
也映射到 192.168.10.10。要实现这一点,请www.site.ru
明确添加:
192.168.10.10 site.ru www.site.ru
(如果愿意,您也可以为其创建单独的行。此行也必须以 IP 地址开头。)
但hosts
不会将流量引导至网站上的特定文件夹。
如果192.168.10.10/site.ru
您指的是site.ru
Web 服务器上的目录192.168.10.10
(即,如果您/
使用小路分隔器),您不能使用该hosts
文件来执行此操作。hosts
文件不支持该行为任何操作系统;它与hosts
文件的功能根本无关。
之所以行不通,是因为 hosts 文件将主机名重定向到 IP 地址。但192.168.10.10/site.ru
不是 IP 地址。它是一个 IP 地址,后面跟着通过应用层协议。 看本文URL 不同部分的含义(以及如何仅通过 IP 解析一部分)。
在这种情况下,正确的解决方案是配置网络服务器根据访问网站的主机名提供不同的内容。这之所以可行,是因为 HTTP 协议包含 Web 浏览器告知 Web 服务器其正在使用的主机名的功能(基本上所有 Web 浏览器都会在适用时发送此信息)。
如果你有能力更改网络服务器,并且需要帮助设置“虚拟主机”并且网络服务器是 Ubuntu 系统,请随时在这里发布有关该问题的单独问题。
如果您没有能力更改 Web 服务器,那么您应该与有此能力的人员联系。
如果甚至那绝对不是一个选择,那么你应该编辑你的问题(或者发布一个新的问题,你自己选择)来详细阐述你的情况。一个更混乱的解决方法,可以满足你的需求可能有可能。它可能涉及 HTTP代理服务器在每个上运行客户机器并通过 URL 重定向 HTTP 流量。
答案2
这是正确的语法IP ADDRESS SITE.COM
真实的例子127.0.0.134 hackme.org