Apacheが、要求されたURLと一致するServerNameを持つ仮想ホストを無視するのはなぜですか?


26

2番目の仮想ホストをApache構成に追加しようとしていますが、新しい仮想ホストを使用するようには見えません。

httpd.confには次の行が含まれています:

ServerName radiofreebrighton.org.uk

またports.conf、次の内容を含むファイルもあります。

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

によってsites-availableシンボリックリンクさsites-enabledれた2つのファイルがありますa2ensite

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

最初の内容は次のとおりです。

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

後者の内容は次のとおりです。

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

しかし、trafalgararches.co.ukにページをリクエストすると、radiofreebrighton.org.ukからページが提供されます。なぜこれが起こっているのでしょうか?どうすれば修正できますか?


編集:

Apacheが理解する仮想ホスト構成:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

apache2ctl -S別名でグリーニングhttpd -S


1
これが原因かどうかはわかりませんが、あなたServerNameとあなたのServerAlias行の端からスラッシュを削除する必要があります。また、Apacheを再起動したことを確認してください。
EEAA

私はそれが原因だとほぼポジティブだ。これは、リクエスト内のホスト名がその仮想ホストのServerNameと決して一致しないことを意味します。
ラースク

1
@ ErikA、@ larsks-皆さん、私の希望を実現しました!末尾のスラッシュを削除し、Apacheを再起動しましたが、何も変わりませんでした。
トム・ライト

1
あなたが持っていますかNameVirtualHost *:80、あなたの設定のどこか?
ラースク

1
上記のサイトが本番か開発かはわかりませんが、実際にそれらのURLにアクセスすると、2つの異なるページが表示されます(見た目は正しいページです)。上記の仮想ホストが開発サーバー上にある場合、このコメントは無視してください。それ以外の場合は、途中で問題を修正しても、キャッシュされたコピーがまだ残っている可能性があります。
cyberx86

回答:


15

さて、この質問は1年以上前のものですが、似たような「問題」に出くわしました。これは明らかかもしれませんが、追加の仮想ホストを有効にした後、Apacheサービスを再起動することを忘れないでください。a2ensite2番目の仮想ホストを実行した後、apache2ctl -SApacheをリロードしなかった場合でも、両方のサイトが利用可能であることを示す出力が表示されます(そのうちの1つがデフォルトです)。

2つの仮想ホスト、site1とsite2があるとします。実行してa2ensite site1から、Apacheサービスをリロードします。これでアクセスできるようにhttp://site1なりました。これがデフォルトです。ここでを実行しますがa2ensite site2、Apacheの再起動を忘れます。出力は次のapache2ctl -Sようになります。

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

ただし、ロードしようとするとhttp://site2、構成がロードされていないため、実際にデフォルトサイト(site1)がロードされます。


同じ出力が得られますが、それでも2番目のWebサイトは読み込まれません。
arqam

15

同様の問題があり、ポート443(SSL / HTTPS)上の追加の仮想ホストがすべて、リストされている最初の仮想ホストのディレクトリに転送されていました。Apacheは本質的にservernameプロパティを無視し、ip:portのみで一致していました。

ポート443の名前付き仮想ホストを有効にするコマンド 'NameVirtualHost *:443'が欠落していることがわかりました。

「NameVirtualHost *:443」は一度だけ呼び出す必要があり、ポート443のvhostsの上で定義する必要があります。ports.configファイルに定義を追加して、次のようにします。

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

変更後、apacheを再起動することを忘れないでください。


1
それは使用してApache 2.4.18で価値が...、何のためにNameVirtualHost:起動時にこのメッセージを生成AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
Lambart

4

私の2セント:IPを固守する必要があるため(インストールされたすべてのネットワークでサイトを提供したくない)、サーバーのローカルプライベートIPが変更された後、ここで変更するのを忘れました:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

もちろん、IPがローカルに存在しないことを知らせるのはApacheの問題ではありません。


2

トム、http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhostをご覧 ください

注意

「メインサーバ」およびあらゆることを注意、 既定のサーバーがします決してことが役立っていない(何らかの理由であなたがNameVirtualHostで指定しない限り、しかし、そのアドレスのための任意の仮想ホストを定義しない)NameVirtualHostでIPアドレスへの要求のために。

したがって、デフォルトをサーバーのIPアドレスに変更しても問題ありません。


試しましたが、何も変わりませんでした。また、特定のIPに縛られないようにしたいので、元に戻します。また、デフォルトのvhostが機能することを指摘する必要があります。
トム・ライト

1

私はここから答えを見つけます:http : //alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

次のように、同じ1つのVirtualHostタグに2つのサーバー名を配置します。

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

VirtualHostタグブロックが2つあったため、2番目のサイトで問題が発生しました。


0

この問題は、サイトを新しいUbuntu 16サーバーに移行するときに発生しました。少し頭を悩ませた後、SSLモジュールがデフォルトで有効になっていないことに気づいたので、<IfModule mod_ssl.c>ブロック内のすべてのものはもちろん黙って無視されます。

何年も前に、この条件付きですべてのSSL仮想ホストをラップしました。今回は、構成ファイルを新しいサーバーにコピーしました。

モジュールを有効にして修正しました:

sudo a2enmod ssl

0

この問題の原因は、サーバーの外部IPを指すURLを含むサーバー上の/ etc / hostsエントリであることがわかりました。

ある時点で、DNSの準備が整う前に設定していたはずなので、サーバーの/ etc / hostsエントリに独自の外部IPを指定して入力しました。

1.2.3.4 vhost.example.com

次に、「vhost.example.com」の既存のサイトにServerAliasを設定します

しかし、vhost.example.comへのSSLリクエストに対してdefault-ssl.confサイトを提供するApacheを停止することはできませんでした。ポート80 HTTPは正常に機能しましたが、代わりにSSLは常にデフォルトサイトを表示しました。最後に、このSOスレッドは、サイトを表示する「apachectl -S」を試してみて、最終的にそれを理解することができました。

したがって、期待するサイトではなくデフォルトのSSLサイトを取得している場合は、/ etc / hostsエントリにサーバーの外部IPアドレスを追加していないことを確認してください!後知恵でやったことはかなり奇妙なことですが、うまくいけばこれは他の誰かに役立つでしょう!

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