Apache vhost_alias 和 NameVirtualHost 可以在同一服务器/ip 中共存吗?

Apache vhost_alias 和 NameVirtualHost 可以在同一服务器/ip 中共存吗?

我为 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_aliasmod_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 地址上,没有默认的虚拟主机。

相关内容