我有一个Apache 2.2服务器的工作,但我得到的NameVirtualHost *:443 has no VirtualHosts重新启动时NameVirtualHost *:443 has no VirtualHosts警告。 但是我有VirtualHosts匹配*:443 。
该系统是Debian挤压。 ports.conf文件如下所示:
NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> NameVirtualHost *:443 Listen 443 </IfModule>
以下是使用apache2ctl运行-S选项时的输出:
% /usr/sbin/apache2ctl -S [Sat Mar 06 10:07:11 2013] [warn] NameVirtualHost *:443 has no VirtualHosts VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:443 is a NameVirtualHost default server q2a-dev.example.org (/etc/apache2/sites-enabled/q2a:1) port 443 namevhost q2a-dev.example.org (/etc/apache2/sites-enabled/q2a:1) port 443 namevhost tcert-dev.example.org (/etc/apache2/sites-enabled/tcert-dev:1) *:80 is a NameVirtualHost default server emailtest-dev.example.org (/etc/apache2/sites-enabled/emailtest:1) port 80 namevhost emailtest-dev.example.org (/etc/apache2/sites-enabled/emailtest:1) Syntax OK
这两个虚拟主机在生活在/etc/apache2/sites-enabled中的文件中定义:
# /etc/apache2/sites-enabled/q2a <VirtualHost *:443> DocumentRoot /usr/share/question2answer ServerName q2a-dev.example.org ServerAlias q2a-dev SSLEngine on SSLCertificateFile /etc/ssl/certs/q2a-dev.pem SSLCertificateKeyFile /etc/ssl/private/q2a-dev.key DirectoryIndex index.php </VirtualHost>
这是另一个:
# /etc/apache2/sites-enabled/tcert-dev <VirtualHost *:443> DocumentRoot /srv/www/tools ServerName tcert-dev.example.org ServerAlias tcert-dev SSLEngine on SSLCertificateFile /etc/ssl/certs/tcert-dev.pem SSLCertificateKeyFile /etc/ssl/private/tcert-dev.key <Directory "/"> AllowOverride None </Directory> </VirtualHost>
我发现了这个问题。 在Andrew Bbuild议在pastebin上发布更多的configuration之后,我仔细查看了所有的文件,发现我有两处出现NameVirtualHost *:443指令的地方:一个在ports.conf ,另一个在目录/etc/apache2/conf.d中的一个文件中/etc/apache2/conf.d所有文件都在Apache启动时加载。
我删除了一个实例,警告消失了。
(请注意,这个问题在Apache 2.4中消失了,因为NameVirtualHost对于出现在多个虚拟主机中的地址/端口组合是隐含的)。
我也使用Debian Squeeze,请看下面我的ports.conf样子。
注释来自默认文件,注意你添加了NameVirtualHost *:443 ,我没有。
NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
注意:如果您希望将NameVirtualHost *:443在ports.conf则应该添加一个链接,以便为443拥有一个默认的VirtualHost,如下所示:
ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl
然后,我通过添加<Directory>...</Directory> (这是你放一些选项,我通过增加一些例子完成你的代码)来更新/etc/apache2/sites-enabled/q2a 。
<VirtualHost *:443> DocumentRoot /usr/share/question2answer ServerName q2a-dev.example.org ServerAlias q2a-dev SSLEngine on SSLCertificateFile /etc/ssl/certs/q2a-dev.pem SSLCertificateKeyFile /etc/ssl/private/q2a-dev.key <Directory /usr/share/question2answer> DirectoryIndex index.php # here you can also add some other options like: Options -Indexes FollowSymLinks MultiViews Order deny,allow Allow from all AllowOverride All </Directory> </VirtualHost>
最后,我将通过更新<Directory>...</Directory>的文档根来更改/etc/apache2/sites-enabled/tcert-dev 。
<VirtualHost *:443> DocumentRoot /srv/www/tools ServerName tcert-dev.example.org ServerAlias tcert-dev SSLEngine on SSLCertificateFile /etc/ssl/certs/tcert-dev.pem SSLCertificateKeyFile /etc/ssl/private/tcert-dev.key <Directory /srv/www/tools> AllowOverride None </Directory> </VirtualHost>
我希望它有帮助。
这是一个警告,说没有为*:443设置虚拟主机
它看起来像
<virtualhost *:443> </virtualhost>
如果它不符合*:443,那么它会抛出这个警告。