题 在Linux / OSX上的/ etc / hosts /文件中,如何进行通配符子域?


我需要在localhost上测试子域。我怎样才能有效地获得这种添加结果 *.localhost.com 对我的 /etc/hosts/ 文件?

如果不可能,我该如何解决这个问题?我需要在本地服务器上测试通配符子域。它是一个Django devserver,Django dev服务器可以处理子域吗?其他一些软件/路由可以给我最终的结果吗?


151
2018-03-02 16:43




属于超级用户? - Paul R
我知道有人说这是不可能的!但是我怎么做呢!什么是/ etc / hosts /之外的东西我可以用来获得效果。我正在测试开发服务器。 - MikeN
在超级用户身上: unix.stackexchange.com/questions/3352/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
由于大多数答案都集中在您的第一个问题(localhost子域通配符),我将回答您的第二个问题作为评论:是的,Django开发服务器完全能够处理localhost子域,您只需要说服您的浏览器和您的操作系统以其方式发送流量(使用以下各种解决方案之一)! - hheimbuerger


答案:


我在Python中编写了一个dns代理。它将读取/ etc / hosts中的通配符条目。看这里: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


40
2018-05-02 09:30



太棒了!我一直在寻找这样一个简单的解决方案(在OSX Mavericks BTW上工作) - Billy Moon
现在,如果我们只能 pip install 它:) - metakermit
我安装了这个,做了一切并运行它,但它不会阻止网站。 - DisplayName
无法提升这一点。我已经永远需要这个,偶然发现了这个问题和答案的宝石,而且我是一个Python黑客,这是一个整洁的花絮。感谢分享! - Farley


安装 的dnsmasq (无论如何,我在所有Linux桌面上都这样做,作为DNS缓存)。在 dnsmasq.conf 添加行:

address=/localhost.com/127.0.0.1

144
2018-03-03 02:37



辉煌!对Mac用户来说,这很简单:1。 sudo port install dnsmasq 2.编辑 /opt/local/etc/dnsmasq.conf 3。 sudo port load dnsmasq - tomc
使用brew的OSX:与上面相同,但brew安装dnsmasq - Matt Humphrey
fyi brew> port(重新@MattHumphrey建议) - electblake
这个例子对我不起作用,可能是因为我正在使用 vagrantup.com 为当地服务。别担心,我已经将IP更改为正确的IP 192.168.50.11 但DNS没有解决。任何想法,这个例子对“非127.0.0.1”IP是否正确? - Brian
很棒的提示。对于Ubuntu 14.04桌面(默认情况下运行dnsmasq),创建一个名为的文件 /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.conf 并把线 address=/localhost.com/127.0.0.1 在其中,然后重新启动。 - user38397


无法在中指定通配符 /etc/hosts 文件。要么显式指定所需的主机名,要么使用适当的规则设置本地名称服务器。


53
2018-03-02 16:46





您需要设置DNS服务器并拥有每个服务器 客户 用它来解决。服务器本身可以像“轻”一样 的dnsmasq 或者像...一样沉重 BIND


14
2018-03-02 20:28



对于dnsmasq来说,这是+1,这是一个很好的文档和易于使用 - David Schmitt
dnsmasq无法做到这一点。 - DisplayName
该行为描述的行为的哪一部分 --address= dnsmasq.conf手册页的部分没有涵盖上面描述的用例? - Gerald Combs


简单的工作流程(无需安装任何东西)

我个人喜欢为此创建一个PAC文件,并让我的浏览器只使用它。

步骤1: 创建一个文件,例如: *.proxy.pac* 在某个地方(我使用我的 $home 夹)

第2步: 粘贴此代码(示例是使用端口8000):

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

第3步: 使您的浏览器使用此PAC文件。

适用于PAC和Firefox的Youtube视频 

第4步: 现在,您可以通过以下方式测试您的应用 http://mysubdomain.localhost/

第5步: 请享用 :)


8
2018-03-02 16:47



也许值得一提的是,这只会影响您的浏览器。其他程序(如 wget,不会受此影响)。这本身不是一个问题,但也许最好提一下。 - Willem Van Onsem


你不能使用通配符 /etc/hosts

看一看 这里 有关如何使用BIND,内置但非活动的DNS服务器和Apache完成OS X的完美演练。


3
2018-04-16 09:11



Apache与子域无关。 - Anonymous


我已经收拾了一个我的旧项目:

https://github.com/airtonix/avahi-aliases

要求:

  • linux中avahi和python-avahi可以安装
  • 你对.local域名感到满意(avahi不支持任何其他类型)

使用dnsmasq或python dns代理的优点:

  • 本地网络上的其他avahi / bonjour用户可以解析您创建的别名并向网络公布(假设您允许访问端口5353)

3
2018-03-06 22:02





这种基于DNS的解决方案在我的情况下完美运行,无需安装任何东西: https://gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)


3
2018-03-02 16:49



适用于Mac OSX的这种惊人的解决方案。 - iDev247
死链接,请更新您的链接,您的解决方案,或以某种方式弃用此答案。干杯。 - Relic
完成(备份已添加) - Fedir RYKHTIK