在没有实际域的情况下模拟“子域”(在专用网络上)


1

我正在设置一台运行Apache2的服务器(Ubuntu Server 18.04),以满足我自己的个人测试和开发需求。我只能通过其本地IP(例如http://10.0.0.125)或它在本地网络上的名称(例如)访问它http://jeeves,但是现在还可以。

我想在此服务器上创建几个子域以保持无关站点的正确隔离,但是我不相信我可以使用实际的子域:http://sub.10.0.0.125由于IP不是域,因此无法工作,因此不能有子域,并且http://sub.jeeves不起作用,因为浏览器解释.jeeves为TLD而不是服务器名称。

所以我想出了另一个解决方案:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
    AliasMatch "^/~(.*)" "/var/www/$1"
</VirtualHost>

现在,我可以创建目录/var/www/sub并通过进行访问http://jeeves/~sub/

我认为这是一个很好的折衷方案...除外,因为它不是子域,并且不能像一个子域那样工作,所以类似的链接<a href="/foo/">将被引用http://jeeves/foo/而不是所希望的http://jeeves/~sub/foo/。我可以在每个站点的代码中进行处理,但这远非理想。

我的问题:是否有任何方法可以使Apache 出于所有意图和目的(尤其是链接)/~sub/将URL 的一部分视为子域?某种BaseDir指令,也许吗?我找不到一个,但这并不意味着它不存在。

在提出建议之前:为该服务器获取实际域有点超出我当前的需求范围;运行专用的DNS服务器似乎增加了太多的复杂性;并且在每个系统上更改主机文件都不是完全可缩放的(例如,在iPhone上也不是一件容易的事)。

我觉得我的解决方案如果可以解决的话,将是满足我的需求的理想选择。


1
如果要支持诸如全局域和子域之类的功能,则需要运行专用的DNS服务器。如果全部在本地,请在主机文件中进行更改。
LPChip '18

Answers:


1

像这样的链接<a href="/foo/">指向http://jeeves/foo/而不是所期望的http://jeeves/~sub/foo/。[…]是否有任何方法可以使Apache出于所有意图和目的(特别是链接)将URL的/〜sub /部分视为子域?某种BaseDir指令,也许吗?

但是,Apache不在乎此处的区别。相对URL(例如)由您的Web浏览器/foo/解析并且Web浏览器无法通过Apache设置进行配置。只要提供的URL是以开头的路径,/Web浏览器将始终将其视为相对于域库的相对路径。

运行专用的DNS服务器似乎增加了太多的复杂性

你可能依靠专用的DNS服务器上,现在为了解决这个jeeves名字-它可能是你的家用路由器内部运行,而全名可能是jevees.lan.jeeves.home.或类似的东西。(客户端设备通过DHCP学习后缀。)

如果幸运的话,路由器将允许您添加自定义的静态主机名,例如sub.lan.;如果非常幸运的话,它甚至可以允许您添加第三级域,例如sub.jeeves.lan.

如果路由器的内部DNS服务器没有足够的灵活性,或者本地名称解析根本不是基于DNS的,那么您就很不走运了。运行您自己的DNS。


有些人在“魔术” DNS服务器上设置了域名,这些域名会转换<anything>.x.y.z.t.<somedomain>为IP地址x.y.z.t。(我不知道当前存在哪些特定域名,但xip.io曾经是一回事。)

这种解决方法以及购买您自己的域的一个潜在问题是,大多数家用路由器只会阻止来自外部的DNS响应,但会解析为“内部” IP地址。(这称为“ DNS绑定保护”。)


1
我对自己的思考越深,就越表明你是对的。我的希望是,也许可以将Apache设置为以某种方式在每个请求前加上正确的“子域”作为前缀,或者基于引用者:如果引用者以/~sub/而不是请求开头,则Apache将重定向至/~sub/[requested url]。无论如何,那是我的模糊思路。
ST Veje

您可以使用RewriteRule做到这一点,但是我可以看到由于脆弱的引用而导致破坏的方式。我听到有人说“太多增加了复杂性”吗?
grawity '18 -10-2

德勤。但是,另一方面,这是个人开发服务器,而不是生产服务器,因此,如果引荐来源不符合预期,则可能是我该死的错。
ST Veje

0

您将需要运行专用的DNS服务器,该服务器可以将您请求的域名转换回您的测试/开发盒IP地址。

我之前通过在我的开发箱上使用本地安装的DNS解决方案尝试过混合结果,这有点麻烦。

我购买了具有NAT反射功能并能够充当DNS服务器的企业级路由器,这使我可以输入开发域名并将其指向开发箱IP。然后,我像通常配置的那样配置Apache虚拟主机,我可以同时使用TLD和sub.TLD域名。

如顾名思义,运行您自己的DNS。它是Web开发人员的救命稻草。


是否有基于非软件的DNS解决方案?
grawity '18 -10-2

我已进行编辑以澄清(希望)我的意思。我的意思是我找到了一个基于Windows的软件,该软件在我的开发箱中提供了DNS服务器。事实证明这相当垃圾,因此我使用了具有该功能的商业级路由器,我只是将需要指向的域添加回我的开发箱。效果明显更好。
Kinnectus '18

猜猜您可以将路由器称为“硬件解决方案”,但是考虑到大多数制造商充其量只能将其视为第三功能,因此它确实运行良好,对此我感到有些惊讶(毕竟,它实际上与路由无关。)大多数域都托管在常规PC软件上,无论是PowerDNS还是BIND或Windows DNS服务...
grawity

我想这取决于人们希望他们的DNS解决方案有多复杂...如果一个小型LAN可以使用他们的路由器,专用的DNS盒(例如您所说的PC或RPi)或他们的业务服务器,选择...重点是,我个人发现,在开发框外管理DNS远比试图使所有事情在开发框上正常工作要简单得多。在我的局域网上有一个专用的盒子,我还可以轻松地在其他局域网设备(如智能手机等)上测试我的作品,而设备本身的配置零变化。
Kinnectus '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.