Apacheで存在しない仮想サイトを指定すると意図しないサイトが表示される(SSL版)

1年半くらい前にApacheで存在しない仮想サイトを指定すると意図しないサイトが表示されるという記事を書きましたが、今度は「https始まりで存在しないサイトにアクセスすると意図しないサイトが表示される」現象に遭遇。 原因も同じですね。最初のVirtualHostで反応するため、です。 今回のケースで言うと、ポート80の仮想サイトは作成したが、ポート443の同名ドメインの仮想サイトを作成していなかったため同じ現象に見舞われた、という形になります。 そのため、対処法も同様です。 ただし、今回は80と443の2つの仮想サイトを作る、というところでやや応用編といった趣がありますかね。
# mkdir /var/www/dummy/
# mkdir /var/www/dummy/web
# chown hoge:hoge /var/www/dummy/web/
適当に仮想サイトのドキュメントルートにするディレクトリを掘って、1.confを作成します。
# vi /etc/httpd/conf.d/1.conf

<VirtualHost xxx.xxx.xxx.xxx:80>
DocumentRoot "/var/www/dummy/web"
ServerName dummy.example.com
<Directory "/var/www/dummy/web">
allow from all
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
また、SSL版の設定ファイルも作ります。
# vi /etc/httpd/conf.d/1-ssl.conf

<VirtualHost xxx.xxx.xxx.xxx:443>
DocumentRoot "/var/www/dummy/web"
ServerName dummy.example.com
<Directory "/var/www/dummy/web">
allow from all
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
</VirtualHost>
SSLはTLS1.0とか1.1も切っても良いと思いますが、今回はテスト環境なのでこれで。 あとはApacheを再起動すればOK。

備考

ちなみに設定次第ではWebminで443の仮想サイトを作ると
#
# When we also provide SSL we have to listen to the
# the HTTPS port in addition.
#
Listen 443 https
Listen xxx.xxx.xxx.xxx:443 #不要
Listen 443 httpsの指定があっても<IPアドレス>:<ポート名>の設定が追加されるため、ポート重複でエラーを起こして再起動に失敗する、ということがあります。 一応注意。
Webminで仮想サイトを作るサンプルの図
Webminで仮想サイトを作るサンプルの図

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。