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
によってa2ensite
にシンボリックリンクされた2つのファイルがあります。
最初の内容は次のとおりです。
<VirtualHost _default_:80>
DocumentRoot /home/tom/www
ServerAdmin [email protected]
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 [email protected]
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
によって収集されます。)
これは明白かもしれませんが、追加の仮想ホストを有効にした後Apacheサービスを再起動することを忘れないでください。
2番目の仮想ホストに対してa2ensite
を実行した後、Apache2ctl -S
の出力は両方のサイトが構成されていることを反映します(そのうちの1つがデフォルトです)が、Apacheをリロードするまでライブにはなりません。
たとえば、site1とsite2という2つの仮想ホストがあるとします。 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)が読み込まれます。
ポート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を再起動してください。
私の2セント:IPに固執する必要があるため(インストールされているすべてのネットワークでサイトを提供したくない)、サーバーのローカルプライベートIPを変更した後、ここで変更するのを忘れていました。
NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>
もちろん、IPがローカルに存在しないことを知らせるのはApacheの問題ではありません。
トム、ここを見てください http://httpd.Apache.org/docs/2.0/en/mod/core.html#namevirtualhost
注意
「メインサーバー」と任意のdefaultサーバーがneverNameVirtualHost IPアドレスへのリクエストに対してserved(何らかの理由でNameVirtualHostを指定しない限り、そのアドレスにはVirtualHostsを定義しないでください)。
したがって、defaultをサーバーのIPアドレスに変更しても問題ありません。
私はここから答えを見つけます: 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>
2つのVirtualHostタグブロックがあったため、2番目のサイトで問題が発生しました。
この問題の原因は、サーバーの/ etc/hostsエントリで、サーバーの外部IPを指すURLが含まれていることを発見しました。
ある時点で、DNSの準備が整う前に設定していたはずなので、サーバーに/ etc/hostsエントリを入力して、独自の外部IPをポイントしました。
1.2.3.4 vhost.example.com
次に、「vhost.example.com」の既存のサイトにServerAliasを設定します
しかし、vhost.example.comへのSSLリクエストに対して、Apacheがdefault-ssl.confサイトにサービスを提供するのを止めることはできませんでした。ポート80 HTTPは問題なく動作しましたが、SSLは常にデフォルトサイトを常に示していました。最後に、このSO=スレッドにより、サイトを表示する "apachectl -S"を試すようになり、最後にそれを理解することができました。
したがって、期待したサイトではなくデフォルトのSSLサイトを取得している場合は、サーバーの外部IPアドレスを/ etc/hostsエントリに追加していないことを確認してください。後からやってみるとかなり奇妙なことですが、うまくいけば、これは他の人の役に立つでしょう!
サイトを新しいUbuntu 16サーバーに移行するときにこの問題が発生しました。少し頭を悩ませた後、SSLモジュールがデフォルトで有効になっていなかったので、<IfModule mod_ssl.c>
ブロックはもちろん黙って無視されます。
数年前、すべてのSSL仮想ホストをこの条件付きでラップしましたが、今回は、構成ファイルを新しいサーバーにコピーしたところです。
モジュールを有効にして修正しました:
Sudo a2enmod ssl