Apacheは特定のサイトのServerNameディレクティブを尊重していません


9

Apacheを使用してVirtualHostsとして構成されているサイトがいくつかありますが、しばらくの間は正常に機能しています。私は最近、サーバーのホスト名をサービスされているドメイン名の1つに変更し、サーバーの外部IPアドレスを指す/ etc / hostsにも追加しました。

私がそうしたので、私のラップトップからドメインにアクセスすると、Apacheのデフォルトの「It works!」に移動します。ページ。/ etc / apache2 / sites-enabled /から000-defaultを削除すると、正しいサイトが表示されます。「www」でサイトにアクセスしようとしています。接頭辞は、000-defaultがサイト対応であるかどうかに関係なく、正しいサイトに移動します。

これらすべてに基づいて、ホスト名または/ etc / hosts(またはその両方)を構成した方法が原因で、デフォルトの構成がデフォルトのページを提供していると思いますが、それを無効にする方法がわかりませんそれらの設定をそのまま残します。どんな提案も歓迎します!

編集-現在のVirtualHost構成は次のようになります。

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

要約すると、いくつかのVirtualHostsがセットアップされていますが、これが正しく機能しない唯一のVirtualHostsです。http://www.domain.comには問題なくアクセスできますが、http://domain.comを使用すると、Apacheのデフォルトの "It works!"が表示されます。ページ。000-default構成を無効にすると、適切なページが表示されます。これは、サーバーのホスト名をdomain.comに設定し、domain.comがサーバーの外部IPアドレスを指すように/ etc / hostsに行を追加した後にのみ発生し始めました。できればそのままにしておきたいです。

編集:私は走ったapache2ctl -Sので、/usr/sbin/apache2 -S「:悪いユーザ名$ {} APACHE_RUN_USER apache2の」私を与えました。出力は次のとおりです。

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

メインのhttpd.confファイルでdomain.comがServerNameとして使用されていますか?またはapache2ctl.confはubuntuを使用しているようですので、名前が異なる場合があります。
グランプリ

回答:


12

先日、この質問に負けました。

ServerNameコンポーネントのない<VirtualHost>コンテナがある場合、デフォルトのホスト名を使用します。000-defaultにはおそらくServerNameコンポーネントがなく、アルファベット順で最初に含まれるため、hostname.comに対して応答し、明示的に宣言されたホスト名を機能させません。


それを修正する方法はありますか?デフォルトの設定で未処理のドメインを処理したいのですが、特定のドメインを処理したくありません。
John Debs

構成で使用されているドメイン以外のドメインを指定するか、ドメイン名をzzz-defaultに変更して、最後に呼び出されるようにします。
karmawhore

わかりました、もう理解できたと思います。私はzzz-defaultを試しましたが、それは私が望んだ正確な動作ではありません。ServerName example.comただし、デフォルト設定での設定はうまくいきます。ありがとう!
John Debs

4

NameVirtualHost *:80ディレクティブはどこかにありますか?

試してください:

/usr/sbin/apache2 -S

これにより、Apacheが構成ファイルを解析する方法がわかります。実際のIPを持つ構成がありますか、それともすべて*がありますか?:80が欠けていますか?Apacheはそれらを混ぜるのが好きではありません。

デフォルトでServerName domain.comまたはServerAlias domain.comがありますか?


そう、私は/etc/apache2/posts.confにそれを持っています。質問に要約を追加して、うまくいけばうまくいくと思います。
John Debs

私の000-default構成はそのままで、ServerNameまたはServerAliasディレクティブがありません。
John Debs

NameVirtualHostは非推奨です。
Sam


0

これはうまくいきました:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

私がタイプミスをしたとき、それはうまくいきませんでした(ServerNameディレクティブを2回):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

ServerNameディレクティブを2回使用すると、リストされた最初のサイト(ここには示されていません)に解決され続けました。

これが誰かに役立つことを願っています...


0

同様の問題があり、Apacheに自動的に認識させるのではなく、メインのhttpd.confファイルでServerNameを明示的に設定することで修正しました。私は、Apacheが決定したのは私のvhost(後で定義)と同じだったと想定しているため、vhostの設定を上書きして、デフォルトのvhostが「勝ち」ました。

httpd.conf ServerNameをマシンが持っているホスト名に設定するだけで、ウェブページを提供することは決してありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.