動作するApache 2.2サーバーがありますが、再起動時にNameVirtualHost *:443 has no VirtualHosts
警告が表示されます。しかし、私はdo*:443
に一致するVirtualHostsを持っています。
システムはDebian squeezeです。 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
2つの仮想ホストは、/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 BがPastebinに構成の詳細を投稿することを提案した後、すべてのファイルをより注意深く調べたところ、_NameVirtualHost *:443
_ディレクティブが出現する場所が2つあることがわかりました:_ports.conf
_に1つと、ディレクトリ_/etc/Apache2/conf.d
_ Apacheの起動時にロードされるすべてのファイル。
インスタンスの1つを削除すると、警告は消えました。
(NameVirtualHost
は複数の仮想ホストに現れるアドレス/ポートの組み合わせに対して暗黙的であるため、この問題全体はApache 2.4ではなくなります。)
私も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
次に、/etc/Apache2/sites-enabled/q2a
を追加して<Directory>...</Directory>
を更新します(ここにいくつかのオプションを配置し、いくつかの例を追加してコードを完成させました)。
<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>
最後に、/etc/Apache2/sites-enabled/tcert-dev
のドキュメントルートを更新して<Directory>...</Directory>
を変更します。
<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>
お役に立てば幸いです。