複数の VirtualHosts を持つ Apache2 構成があります。DNS は*.<domain>.<tld>
複数のドメインを受け入れるように設定されています。すべて正常に動作していますが、アクセスするとsomething-random-here.example.com
無効な VirtualHost が選択されているように見えます (最初に見つかったものまたは最後に見つかったものだと思います)。VirtualHost エントリのいずれもドメインまたはサブドメインと一致しない場合に、Apache に特定のルールを使用するように指示する方法はありますか? できれば 404 を返したいです。
答え1
一致する名前がない場合、Apache は最初の仮想ホストを使用します。ランダムな名前を持つ新しい仮想ホストを最初の仮想ホストとして設定するだけで、好きな名前を表示したり、404 ページを返したりできます。
答え2
ワイルドカードにはサイト構成ファイルが含まれます:
Include path/to/site/confs/*httpd.conf
サイトの設定ファイルを整理して、期待どおりの順序で読み込まれるようにします。例...
01-httpd.conf
02-サイト1-httpd.conf
03-サイト2-httpd.conf
等...
Apache はこれらを順番に読み取ります。次に、一致しない仮想ホストをキャッチし、デフォルトのサイトを読み込む代わりに 404 を返すために、常に最後に読み込むサイトを作成します。
99-キャッチオール-httpd.conf
<VirtualHost *:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
ポートは、httpd がリッスンするポートに必ず置き換えてください。または、httpd が特定のインターフェースをリッスンしている場合は、次のようにインターフェースごとに catchall を追加する必要があります。
<VirtualHost 192.168.1.101:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
これが役に立つことを願っています。私はこの方法を使用して、指定した順序でサイトを読み込み、一致しない仮想ホストが予期しないサイトを意図せずに読み込むのを防ぎます。
答え3
前述のようにMoritz Both
、Apache2 は、要求された仮想ホストと一致しない場合、最初に見つかった仮想ホストを使用します。
Apache2 を初めてインストールすると、テンプレートとして使用したり、変更したり、削除したりできるデフォルトの Web サイト conf があります。default.conf もあったので、000-default.conf の実際の用途が何なのかずっと疑問に思っていました。説明を読んでMoritz Both
、すべてがより理解しやすくなりました。
私のサーバーでは、デフォルトのホスト名 (Web サイト) の設定を 000-default.conf ファイルにコピーして、a2ensite 000-default
.
現在、私の Web サイトに一致しないドメイン リクエストがあるたびに、実際のデフォルト ページのコピーである 000-default ページが提供されます。