我为 PHP 程序员设置了一个开发服务器,并且已经运行了一段时间。系统是 Debian,带有默认的 Apache 包:
# apache2 -v
Server version: Apache/2.2.9 (Debian)
Server built: Dec 11 2010 18:58:55
我已经设置了大约 30 个基于名称的 VirtualHost,每个项目和每个开发人员一个。我使用脚本进行配置,但现在我必须添加大约 15 个新项目,它们都具有标准目录结构,所以我想我会使用mod_vhost_alias
我的配置与此类似:
NameVirtualHost *:80
#Default vhost
<VirtualHost *:80>
DocumentRoot /var/www/404
ServerName dev.example.com
ErrorLog /var/log/apache2/404.error_log
TransferLog /var/log/apache2/404.access_log
<Directory "/var/www/404">
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
#this entry is repeated many times
#with different server names, document roots
# and other differences, bu basics stay the same
<VirtualHost *:80>
DocumentRoot /var/www/crm
ServerName crm.dev.example.com
ErrorLog /var/log/apache2/crm.error_log
TransferLog /var/log/apache2/crm.access_log
<Directory "/var/www/crm">
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
# I added Vhost_alias virtaul host today, at the end of the config
<VirtualHost *:80>
# This is for pages similar to some-page.pl.web.example.com
UseCanonicalName Off
ServerAlias *.web.dev.example.com
VirtualDocumentRoot /var/www/web/%-4+/cur
ErrorLog /var/log/apache2/%-4+.error_log
TransferLog /var/log/apache2/%-4+.access_log
<Directory /var/www/%-4+>
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
结果是,当我连接到http://my-page.com.web.dev.example.com我从 /var/www/404 目录获取默认 vhost。目录 /var/www/web/my-page.com/ 存在,并且包含 my-page.com 真实网页的副本。
我做错了什么?我是否需要为“标准”NameVirtualHost 和 vhost_alias 设置单独的 IP 地址?我还应该检查什么?
答案1
是的,您可以在相同的配置中使用NameVirtualHost
和。像这样修改您的条目:mod_vhost_alias
mod_vhost_alias
<IfModule mod_vhost_alias.c>
<VirtualHost *:80>
ServerAlias *.web.dev.example.com
VirtualDocumentRoot /var/www/web/%-4+/cur
ErrorLog /var/log/apache2/%-4+.error_log
TransferLog /var/log/apache2/%-4+.access_log
<Directory /var/www/%-4+>
allow from all
Options Indexes Includes
AllowOverride All
</Directory>
</VirtualHost>
</IfModule>
将此条目直接放在Include conf.d/*.conf
中的行下方httpd.conf
(在 RHEL 系统上找到/etc/httpd/conf/httpd.conf
),或者放在 中的新文件中(/etc/apache2/conf-enabled/
对于 Ubuntu)。
编辑:我写了博客更多信息。
答案2
我之前已经为通配符子域设置了类似的基于 VirtualDocumentRoot 的目录。能够在某人的主目录中创建一个目录(通常通过 Samba 共享他们的目录,以便可以从开发人员的桌面使用它们)非常有用,而且您还创建了一个新网站(至少用于开发和测试)。
至于您的问题,我只是将它们放在不同的 IP 地址上,没有默认的虚拟主机。