というファイルがありますpga-default.confそれは次のようになります。
<VirtualHost *:8008>
ServerName 192.168.1.10
DocumentRoot /var/www/portals/default/public
<Directory "/var/www/portals/default/public">
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/default.error.log
CustomLog /var/log/httpd/default.requests.log combined
</VirtualHost>
問題は、私が試してみるたびにhttp://192.168.1.10:8008常にデフォルトの Apache テスト ページが読み込まれます。 デフォルト.confのように見えますが、
Listen 8008
<VirtualHost _default_:8008>
DocumentRoot "/www/default"
</VirtualHost>
<VirtualHost *:8008>
しかし、<VirtualHost 192.168.1.10:8008>
にpga-default.conf期待通りに動作します。なぜそうなるのか知りたいです。私の知る限り、これはサーバーが特定のIPアドレスとポートに最適なVirtualHostを選択しないためです。(この回答は、VirtualHost コンテキストにおける _default_:* と *:* の違い)
他にもいくつかの方法を試しましたが、上記の方法以外はどれもうまくいきませんでした。以下は他の方法です。(pga-default.conf)
ServerName 192.168.1.10
への変更ServerName 192.168.1.10:8008
- 使用済み
ServerAlias 192.168.1.10
注記- 上記の構成で、<VirtualHost *:8008>
同僚の一部は成功した結果を得ました。この問題は私にのみ発生しました。
ここで私が見逃したものは何でしょうか? 他の人は期待通りの結果が得られるのに、私は得られないのはなぜでしょうか?
答え1
各仮想ホストで常に ServerName を定義する必要があります。
おそらく「default」が最初にロードされ、特定のサーバー名が定義されていないため、すべてのリクエストが取得されます。デフォルトの仮想ホストで「ServerName default」を設定すると、これを簡単に試すことができます。
だから「http://192.168.1.10:8008" これで適切な仮想ホストに移動します。
したがって、ベストプラクティスとして、各仮想ホストに常に一意の ServerName ディレクティブを定義し、要求されたホスト名が定義された仮想ホストと一致しない場合は最初の仮想ホストが要求を受け取ることを考慮することを覚えておいてください。また、誤って 2 つの仮想ホストに同じサーバー名を定義した場合、最初に読み込まれた仮想ホストが要求を受け取ります。