主机文件适用于自定义子域,但不适用于自定义域

问题描述

我正在开发一个多租户应用程序,需要修改我的 etc/hosts 文件以测试租户可能使用的不同 URL。有些人会使用像tenant1.mysite.com这样的子域,而另一些人会完全使用他们自己的URL,比如tenant2.com(为了掩盖它是白标网站的事实并假装是他们自己的)。

在我的主机文件中,我有

127.0.0.1 mytenantsdomain.com
127.0.0.1 localhost
127.0.0.1 thor.localhost
127.0.0.1 potter.localhost
127.0.0.1 testtenant.com

localhost、thor.localhost、potter.localhost 在向它们添加 :8000 时都按预期工作。即它们连接到本地开发服务器并显示预期的特定于租户的内容。但是,mytenantsdomain.com 和 testtenant.com 都给出了 ERR_CONNECTION_REFUSED - 我猜是因为缺少端口:8000 tbh。

我尝试了一些修复方法,例如使用以下内容刷新缓存,但没有任何效果

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder     

有谁知道我还能尝试什么来让它们全部工作?

解决方法

对于以后要学习的任何人 - 经过更多的挖掘(在 serverfault.com 上),以下经验教训:

  1. etc/hosts 不是这个地方。它只是解析一个文本域 名称到 IP。与端口无关。
  2. 解决方案只是在 .com - http://mytenantsdomain.com:8000/ 解析到本地开发服务器之后添加 :8000。
  3. 要使其永久化(即不必向其添加 :8000),端口转发将是可行的方法。所以你需要一个类似这样的解决方案:https://serverfault.com/questions/791181/redirecting-traffic-to-a-specific-address-and-port-using-pf-on-macos