ポート 80 からポート 8080 へのリダイレクト: Proxypass を使用した Apache は遅すぎるが、xyz.com:8080 に直接アクセスすると非常に高速になる

ポート 80 からポート 8080 へのリダイレクト: Proxypass を使用した Apache は遅すぎるが、xyz.com:8080 に直接アクセスすると非常に高速になる

奇妙な問題に直面しています。サーバーがビジー状態であり、応答時間がリクエストあたり約 1 分 (非常に遅い) になっています。これは Tomcat の前で実行されています。xyz.com:8080 でサイトにアクセスすると、非常に高速になります (1 リクエスト/秒)。また、リクエストを Tomcat にリダイレクトする Mod_Proxy を使用しています。質問は、Apache から Tomcat にリクエストを渡す代わりに、Tomcat に直接リクエストを送信できるかどうか、または Apache で何らかの構成が必要なのかということです。

Httpd.conf ファイルは次のようになります。

ProxyPreserveHost On 
ProxyPass / http://localhost:8080/ retry=1 acquire=300 timeout=60 Keepalive=On 
ProxyPassReverse / http://localhost:8080/ ErrorLog /Path/To/Logs/Apache.log LogLevel warn

答え1

Apache は高速で実行されていると思いますが、Tomcat のリクエストに対してだけ遅いのでしょうか? 質問が完全に明確ではありません。Apache 自体が遅い場合は、それを確認する必要があります。ポート 80 でリッスンできるプロセスは 1 つだけなので、ポートを指定したくない場合は、Apache を経由する必要があります。または、Apache を完全に廃止し、代わりに Tomcat がポート 80 でリッスンするようにします。ただし、Apache はこれをプロキシするのに十分な速度であるはずです。

Apache 自体は高速だが、プロキシされた Tomcat リクエストに対してだけ遅い場合、私が提案できることはいくつかあります。

DNS ルックアップが遅い可能性がありますが、localhost ではまれです。localhost は hosts ファイルにあると思いますか? これを 127.0.0.1 に変更して、DNS ルックアップが不要になるようにしていただけますか?

これらすべてのオプションが必要ですか?

  • ProxyPreserveHost - Tomcat はホスト名を認識する必要がありますか? 認識しない場合は、それを保存する必要はありませんか?
  • retry/aquire/timeout/keepalive - これらは、プロキシが信頼できる接続上にない場合やファイアウォールの背後にある場合に使用します。Apache と Tomcat が同じサーバー上にある場合は必要ありません。
  • プロキシ要求のカスタム ログ ファイルは便利ですが、私自身は使用していません。

これらがなぜ問題を引き起こすのかはわかりませんが、まだ使用していないので、まずはこれらを取り外して、状況が改善されるかどうか確認してみることをお勧めします。その後、必要であれば、1 つずつ追加し直して、どこに問題があったのかを確認します。

したがって、私はこれを簡略化して次のように置き換えます。

ProxyPass / http://127.0.0.1:8080/ 
ProxyPassReverse / http://127.0.0:8080/

そしてもう一度試してください。

また、mod_proxy もロードしていると思いますか? 最も単純なことが見逃されることもあります ;-)

関連情報