Apacheで一致しないドメイン/サブドメインのデフォルトの処理


12

複数のVirtualHostsを持つApache2構成があります。DNSは*.<domain>.<tld>複数のドメインで受け入れるように設定されています。すべてが正常に機能していますが、私が行った場合something-random-here.example.com、無効なVirtualHostが選択されているようです(最初または最後に見つかったVirtualHostを推測しています)。ドメインまたはサブドメインに一致するVirtualHostエントリがない場合に特定のルールを使用するようにApacheに指示する方法はありますか?404を返したいと思います。

回答:


12

名前が一致しない場合、Apacheは最初の仮想ホストを使用します。新しい仮想ホストをランダムな名前で最初の仮想ホストとして設定し、好きなものを表示するか、404ページを返します。


ありがとう、詳しく説明してもらえますか?これを機能させることはできません。
ライオール

2
apache2設定ファイルはどのようにレイアウトされていますか?または、どのオペレーティングシステムを使用していますか?Apacheは特定の順序で構成を読み取ります。最初に表示されるVirtualHostはデフォルトのVirtualHostです。未知のホスト名からすべてのトラフィックを受信します。したがって、単一の構成ファイルがある場合、最初のVirtualHostはそれです。あなたが最もlinuxes上のように、複数のものを持っている場合、それは1と呼ばれる0defaultまたはそう...かもしれ
モリッツ両方

にいくつかのデフォルト設定を入れましたports.conf。仮想ホストで<ip>:80を使用しているときに*:80に一致させようとしたため、機能していませんでした。代わりに、IPごとに個別のデフォルトエントリを作成する必要がありましたが、現在は機能しています。
ライオール

最初または最後のv-hostファイルは使用されません。Apacheは変わったと思います。
コボルト

4

ワイルドカードには、サイト構成ファイルが含まれます。

Include path/to/site/confs/*httpd.conf

サイトのconfファイルを整理して、予想される順序でロードされるようにします。例...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

等...

Apacheはこれらを順番に読み取ります。次に、常に最後にロードするものを作成して、一致しない仮想ホストをキャッチし、デフォルトのサイトをロードする代わりに404を返します。

99-catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

httpdがリッスンするポートにポートを置き換えてください。または、特定のインターフェイスでリッスンするhttpdがある場合は、代わりに各インターフェイスにキャッチオールを追加する必要があります。

<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>

お役に立てれば。このメソッドを使用して、指定した順序でサイトをロードし、不一致の仮想ホストが予期しないサイトを意図せずにロードしないようにします。


「ServerAlias *」をキャッチオールルールから削除する必要はありませんか?
Ahm3dは

私はそれは問題ではないと思います。catchallより前の仮想ホストがリクエストを処理しない場合、これらは404応答を返します。ServerAlias *を削除する必要がある理由はわかりませんが、それらは不必要に特定されている可能性があります。
ジェイソンSlobotski

0

前述のようにMoritz Both、Apache2は、要求されたものと一致しない場合、最初に検出した仮想ホストを使用します。

Apache2を初めてインストールするとき、テンプレートとして使用、変更、削除できるデフォルトのWebサイトconfがあり、000-default.confにはdefault.confもあるので、実際に何のためにあるのかといつも思っていました。Moritz Both言ったことを読んだ後、今ではすべてがより理にかなっています。

サーバーに対して行ったのは、デフォルトのホスト名(ウェブサイト)の設定を000-default.confファイルとにコピーすることでしたa2ensite 000-default

今、私のウェブサイトへの一致しないドメイン要求があるたびに、それは私の実際のデフォルトページのコピーである000デフォルトページを提供します。


1
私は同じことをしますが、一致しない/デフォルトのホストは、適切なトップレベルサイトにリダイレクトを送信し、表示されたURLも正しいものに変更します。
ivanivan

それは本当に素晴らしいアイデアです!私はそれについて考えませんでした。私は間違いなくそのように私のサイトを実装します:)
Newteq開発者

何らかの理由で、SSL(デフォルトページ)をリダイレクトさせることができないようです。私は持って<VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> いますが、URLは変わりません。非SSLバージョンでも同じことをしましたが、正しくリダイレ​​クトされます。何か案は?
Newteq開発者
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.