web-dev-qa-db-ja.com

Apache VirtualHostがページを提供していない

自宅のIPアドレスにリンクされているドメイン名があります。ただし、同じサーバー/ IPを使用して複数のWebサイトを表示したいと思います。

ただし、仮想ホストを機能させることはできません。

私のconf.d/virtual.confは次のとおりです。

NameVirtualHost 192.168.10.151:80

私のsites-available/www.mydomain.comは:

Listen 80
<VirtualHost *>
        ServerAdmin     [email protected]
        ServerName      www.mydomain.com
        ServerAlias     mydomain.com

        #Indexes and Directory Root
        DirectoryIndex  index.html index.php
        DocumentRoot    /media/BigDisk/www/www.mydomain.com/

        # Log Files
        ErrorLog        /media/BigDisk/www/www.mydomain.com/logs/error.log
        CustomLog       /media/BigDisk/www/www.mydomain.com/logs/access.log combined
</VirtualHost>

そして、サイトはa2ensiteを使用して有効にされ、Apacheは警告やエラーなしでリロードされましたが、www.mydomain.comに移動しても何も表示されません( "Opps!Google Chrome接続できませんでした...」)。

私は何が間違っているのですか?

更新:Apacheを再起動すると、次のようになります。

malfist@webhost:~$ Sudo /etc/init.d/Apache2 restart
[Sudo] password for malfist:
 * Restarting web server Apache2                                                                                                                       Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
6
Malfist

名前解決の確認

まず、nslookupまたはDigまたはHostを使用して、www.mydomain.comがルーターの静的外部IPアドレスを指していることを確認します。

ルーター構成を確認する

次に、ルーターのポート転送が外部インターフェースのポート80に到着するリクエストがサーバーのプライベートIPアドレスのポート80に転送されるように構成されていることを確認します。

ISPの制限を確認する

次に、ISPの利用規約でHTTPサービスの実行が許可されていることを確認します。一部のISPは、インバウンドHTTP接続をブロックします。

LAN!=インターネット

最後に、LAN内からこれをテストする場合、www.mydomain.comに別のIPアドレスが必要な場合は、192.168.10.151 www.mydomain.comをホストファイルに追加できます(例:/etc/hostsまたはC:\WINDOWS\system32\drivers\etc\hosts)。 Malfistがコメントで指摘したように、ルーターがNATリフレクションをサポートしている場合、これは必要ありません。


更新:

Apacheエラーログ(すべて)を確認してください

「接続できませんでした」は、Apache vhost構成の問題ではなく、基本的なIP接続の問題を示唆しています。後者は、404または500のHTTP応答をもたらす可能性が高くなります。要求がApacheに到達した場合、エラーログにエントリが表示されます。そこにエントリがない場合は、Apacheがリクエストを受信して​​いないことを示しています。

Apacheによって報告されたフォローアップの警告とエラー

NameVirtualHost *:80にはVirtualHostsがありません

よくある設定ミス を参照してください

複数のNameVirtualHost行により、「NameVirtualHost *:80 has VirtualHosts」という警告が表示されます。ただし、Apacheは2番目のディレクティブを無視し、最初に定義されたNameVirtualHost行を使用します。これは、複数の仮想ホスト構成ファイルを使用していて、特定のNameVirtualHost行を1回だけ定義する必要があることを理解していない場合に発生するようです。上記のように、これは特にアップグレード後にdebianports.confファイルで発生する可能性があります。

アドレスは既に使用されています:make_sock:アドレス0.0.0.0:80にバインドできませんでした

他のいくつかのプログラムはすでにポート80でリッスンしています。netstat -anpを使用して何を見つけ、それを停止します。

診断ツール

イーサネットスニファ

Apacheサーバーでネットワークスニファ(tcpdumpやwiresharkなど)を使用して、どの着信HTTPリクエストが到着しているかを確認します。到着していない場合は、IP接続の問題であることがわかります。


アップデート2:

Wget

別の優れた診断ツールは、サーバーでこれを実行することです

 wget --header="Host: www.mydomain.com" -O - http://localhost

これはあなたが見るべき出力の一種です

 [root @ mybox logs] #wget --header = "Host:foo.bar" -O-http:// localhost 
-2011-09-0118:56:08- --http:// localhost /
ローカルホストを解決しています... 127.0.0.1 
ローカルホストに接続しています| 127.0.0.1 |:80 ...接続されています。
 HTTPリクエストが送信され、待機しています応答... 200 OK 
長さ:125 [text/html] 
保存先: `STDOUT '
 
 0%[] 0 --.- K/s <html> 
 <head> 
 <title> mybox </ title> 
 </ head> 
 <body> 
 <h1 > mybox </ h1> 
 <p>見るものはありません。移動してください</ p> 
 </ body> 
 </ html> 
 100%[ ======================================>] 125 --.- K/s in 0s 
 
 2011-09-01 18:56:08(10.8 MB/s)-`-'保存[125/125] 
 
 [root @ mybox logs] #tail -n 1 access_log 
 127.0.0.1 --- [01/Sep/2011:18:56:08 +0100] "GET/HTTP/1.0" 200125 "-" "Wget /1.11。 4 RedHatが変更されました "
 

サーバーの応答ヘッダーを表示するには、-Sオプションをwgetに追加します。

「接続が拒否されました」などのメッセージが表示された場合、Apacheはポート80をリッスンしていません。

Netstat

netstat -anpからの出力には、

tcp        0      0 :::80        :::*       LISTEN      12345/httpd
5
RedGrittyBrick

私はこれに何時間も費やしました、そして私がする必要があるのは私のIPアドレスifconfigeth0を解放することだけです。静的になり、仮想ホスト名を認識します。

1
Redbike
NameVirtualHost  *:80

これは/etc/Apache2/ports.confにあります。削除するか、コメントアウトしてApacheを再起動すると、警告が消えます。

1
carlos