如何将所有 *.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
如何将文件从 Vagrant 机器复制到 localhost
Vagrant VirtualBox Local Dev Env,Ubuntu,Yarn,Vue CLI 3 - 问题