我正在构建的本地托管网站中测试@media 语句,但我的生命无法通过 site_IP/virtual_host_name 访问该网站。
如果我可以访问 hosts 文件,我只需将(站点名称)localtest.com 以及站点的 IP 192.168.1.X 添加到文件中,一切正常。我没有 root 手机(我的联系人希望他的网站针对手机访问进行优化),因此无法编辑 dev hosts 文件以进行必要的更改。我意识到我可以使用 F12 dev 工具在本地提取不同大小的站点,但我想使用http://localtest.com因为(在我看来)这是真的。我无论如何都不能让它工作。我试过
- http://192.168.1.X/localtest.com
- http://192.168.1.X/var/www/localtest.com(文档根目录为 sites-enabled 中的 /var/www)
总是得到 404。我已经使用 Wireshark 和 curl 检查了访问情况。请求到达服务器并得到 404 的答复。我有一台旧的 Windows 笔记本电脑,证实了这个问题……只要我在 hosts 文件中填充正确的条目 192.168.1.X localtest.com
它开始正确显示 - 使用http://localtest.com
UFW 没有阻止端口 80
如果我http://192.168.1.X我得到了 UBUNTU 成功页面。这真是太愚蠢了。我确信我以前也做过这样的事
我希望你读完这篇文章后还能保持清醒,并且能够提出一些建议,我正在抓狂……
谢谢
凯文
答案1
您遇到的问题是您的客户端没有发送您想要的“Host”请求标头。Web 服务器正在获取主机 {ip_address} 的请求,由于它与配置的 server_name(或其他名称虚拟主机配置)不匹配,因此它仅提供默认服务。
服务器端修复
解决此问题的简单方法是将“localsite.com”设为默认站点,或将 IP 地址添加到 server_name 配置中。
客户端修复
客户端,您必须发送正确的 Host 标头。在命令行上,您可以使用类似 的内容curl http://ip.ad.dr.es -H "Host: localtest.com"
,我从未使用过类似的东西,但您可以尝试使用浏览器插件来修改它发送的标头 -https://addons.mozilla.org/en-US/firefox/addon/modify-header-value/似乎可以做到(但要小心,任何人都可以制作浏览器插件,甚至是坏人:))
答案2
大多数网络服务器支持基于名称的虚拟主机,并且可以根据访问该服务器的网络浏览器提供的主机名显示不同的内容。
您可能设置了多个基于名称的虚拟主机,并且localtest.com
只有在使用该域时才会显示内容。
当 Web 浏览器提供不同的主机名或使用服务器 IP 地址时,将使用具有不同内容的不同或基于默认名称的虚拟主机。
您最好的解决方案:
获取自己的域名
example.com
设置 DNS 记录(例如)
www.client-name.example.com
,dev.client-name.example.com
并www.otherclient-name.example.com
指向您的公共 Web 服务器和/或开发系统的 IP 地址使用这些有效的主机名设置基于名称的虚拟主机
这样,您就不必再处理主机文件条目,可以随时轻松使用常规 URL,并且还可以获得有效的 TLS 证书。
- 奖金如果您(也)使用公共网络服务器,请考虑设置访问控制(即从您自己的 IP 地址授予访问权限和/或设置基本身份验证以要求有效的用户名/密码进行访问),然后您的客户也可以访问他们的演示站点,而无需设置主机文件条目。
另一种解决方案是确保 localtest.com
成为默认虚拟主机。通常在 Apache httpd 中,当您禁用 000-default.conf(和/或所有其他虚拟主机条目或)或通过为 localtest.com
配置文件指定一个按字典顺序排序的名称,使第一个加载的条目成为加载的第一个条目时,即命名配置0000-localtest.conf
而不是localtest.conf