当用户的 DNS 无法解析主机名时,我可以通过服务器的主 IP 地址将用户引导至服务器上的虚拟主机吗?

当用户的 DNS 无法解析主机名时,我可以通过服务器的主 IP 地址将用户引导至服务器上的虚拟主机吗?

问题:某些个人的 ISP 有时无法解析我的 LAMP 安装上的虚拟主机之一。Ubuntu 10.04 LTS,Apache 2。我正在寻找可以通过 IP 实现的黑客攻击。

背景:这台机器上有多个虚拟主机:

  • default.example.com
  • subdomain1.example.com
  • subdomain2.example.com
  • subdomain3.example.com
  • 问题域.example.com

  • 它们实际上位于:

  • var/www/default.example.com
  • var/www/subdomain1.example.com
  • var/www/subdomain2.example.com
  • var/www/subdomain3.example.com
  • var/www/problemdomain.example.com

  • 偶尔,一些 ISP 的用户无法访问其中一个域名,今天是

    问题域.example.com

    但是这些用户可以通过 IP 地址路由到服务器并接收默认的服务器根登录页面:

    123.123.123.123

    这将把他们带到“default.example.com”

    注意:我希望他们到达的目录位于当前目录之上,并且目录遍历已关闭。

    想法1: 如果他们可以获取服务器的 IP,并且我创建了一个登录目录 (default.example.com/foo),我能否以某种方式将他们重定向到服务器上的另一个文件夹,从而将他们带到正确的位置?我该怎么做?* 请记住,DNS 不起作用,所以我认为 301 重定向不起作用,因为它只会告诉他们的浏览器查找他们无法解析的“problemdomain.example.com”。

    普通话重述: 有没有办法告诉 apache“嘿,如果有人在主服务器的默认网页登陆页面上请求目录‘foo’:

    123.123.123.123/foo

    然后将它们带到服务器上的另一个虚拟主机

    problemdomain.example.com/foo

    或者,有没有类似使用的方法:

    123.123.123.123:虚拟主机名

    还是其他“强制”措施?对于我来说,要求遇到问题的最终用户在其系统上添加主机条目是不现实的。只是这样,对于那些确实有问题的罕见情况,我可以说一些比“只需在另一个网络连接上尝试一台计算机”更有帮助的话。

    非常感谢您的帮助。

    答案1

    既是也不是。您的第一个普通话示例很简单 - 您可以使用 URL 重写。第二个普通话示例可能不可行,但无论如何也没有必要。

    但是,这取决于每次都是同一个域是问题域 - 如果这是真的,最简单的解决方法是将“问题”域放在列表的首位。如果 Apache 没有获取主机信息,则默认为该 IP 列出的第一个域。如果问题域不同,您只能获取更多 IP 地址并在每个 IP 上放置一个域(这违背了基于名称的虚拟主机的目的),将责任重新放在客户端连接上(您说过您想避免这种情况),或者拥有一个“默认”域,其中只有一个简单的登录页面,其中包含指向特定页面的链接,这些页面可以通过名称或 URL 重写进行区分。哪一个会给您带来最少的长期麻烦?

    答案2

    我认为你无法自动完成你想做的事情。当客户端想要连接到主机时,它会将 problemdomain.example.com 解析为 IP 地址。它会联系 IP 地址上的服务器。作为对话的一部分,它会传递一个 Host 标头

    Host: problemdomain.example.com
    

    服务器使用 Host 标头来决定如何将请求路由到相关的虚拟主机。


    在您的情况下,对解析器的请求失败,因此客户端不知道主机要联系服务器,所以它无法联系,呃,就是这样。

    相关内容