如何将所有 *.dev 路由到 vagrant box 上的子文件夹

Posted

技术标签:

【中文标题】如何将所有 *.dev 路由到 vagrant box 上的子文件夹【英文标题】:How to route all *.dev to subfolders on vagrant box 【发布时间】:2015-01-31 22:20:21 【问题描述】:

我希望每一个*.dev的Host都会被路由到我的vagrant机器到/var/www/vhosts/*.dev/public,例如我的本地开发环境project1.dev位于/var/www/vhosts/project1.dev/public

所以当我在我的盒子中添加一个新的(子)项目时,我不需要更改我的 config.yaml(通过 puphpet.com 安装的 Vagrant)并重新加载机器。

在我的电脑上,我在/private/etc的hosts文件中添加了以下内容:

192.168.56.101 *.dev

在我的虚拟机上,我将/etc/apache2/sites-enabled 中的10-default_vhosts80.conf 更改为:

# ************************************
# Vhost template in module puppetlabs-apache
# Managed by Puppet
# ************************************

<VirtualHost *:80>
  ServerName default

  ## Vhost docroot
  DocumentRoot "/var/www/default"

  ## Directories, there should at least be a declaration for /var/www/default

  <Directory "/var/www/default">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ## Load additional static includes

  ## Logging
  ErrorLog "/var/log/apache2/default_vhost_80_error.log"
  ServerSignature Off
  CustomLog "/var/log/apache2/default_vhost_80_access.log" combined

  ## Custom fragment
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/default/$1
</VirtualHost>
<VirtualHost *.dev:80>
    ServerName dev
    VirtualDocumentRoot /var/www/vhosts/%0
</VirtualHost>

很遗憾,这不起作用。有任何想法吗?我是这门学科的初学者。

【问题讨论】:

【参考方案1】:

很遗憾,hosts 文件不支持使用通配符。您必须手动定义要重定向的每个主机。

另外,您的主机文件位于/etc/hosts

【讨论】:

我要试试这个来添加通配符支持:code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/…【参考方案2】:

最后,我使用dnsmasq 将所有.localdev 域路由到127.0.0.1。请注意,我使用的是.localdev 而不仅仅是.dev.local,因为这似乎会导致问题(OS X 10.10),因为.dev 是proposed gTLD,而.local 被Apple's Bonjour 使用。

然后我通过创建和启用此站点来配置 Apache:

<VirtualHost *:80>
  ServerAlias localhost *.localdev #wildcard catch all
  VirtualDocumentRoot /hosts/%1/public
  UseCanonicalName Off
  <Directory "hosts">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

(来自:http://brunodbo.ca/blog/2013/04/26/setting-up-wildcard-apache-virtual-host-wildcard-dns)

【讨论】:

【参考方案3】:

我使用proxy auto configuration file。这适用于 Windows、MacOS 和 Linux。简单,flexible,无需其他软件。以下示例将所有 *.dev 流量路由到您的 vagrant box:

function FindProxyForURL(url, host) 
    if (dnsDomainIs(host, ".dev")) 
        return "PROXY 127.0.0.1:8080";
    

    return 'DIRECT';


如果需要,请将127.0.0.1:8080 替换为您的 vagrant box 的 IP 和网络服务器端口。将此文件存储在某处。您可以将其存储在本地,也可以让 Vagrant-box 上的网络服务器托管该文件。

Windows:请参阅here 如何在 Windows 上使用 PAC 文件。

MacOS:请参阅here 如何在 MacOS 上使用 PAC 文件。您可以使用file:///Users/username/path/to/proxy.pac 链接到该文件。

Linux:取决于 linux,但我相信 linux 用户可以通过 Google 了解他们的具体情况。

【讨论】:

以上是关于如何将所有 *.dev 路由到 vagrant box 上的子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何将 stdout、stderr 重新路由回 /dev/tty

无法将 Ngrok 与 Vagrant 连接

如何将文件从 Vagrant 机器复制到 localhost

Vagrant VirtualBox Local Dev Env,Ubuntu,Yarn,Vue CLI 3 - 问题

如何将 NodeJS 调试器通过隧道传送到 Vagrant 框?

如何将自己的公钥添加到 Vagrant VM?