Rails デプロイメント ソリューションの 1 つは、Apache をリバース プロキシとして使用して、リクエストをアプリケーション サーバー (Phusionpassenger など) に転送することです。リバース プロキシ サーバーとして、Apache はその背後にあるアプリケーション サーバーとどのように対話しますか?
たとえば、私の Apache はポート 1080 をリッスンし、プロセス情報をチェックしました:
リクエストが来ると、まず Apache に送られます。Apache はこれらのプロセスからプロセスを割り当ててリクエストを処理します (たとえば、プロセス 8391 が割り当てられます)。では、プロセス 8391 は何をするのでしょうか?彼はこのリクエストを後続のアプリケーション サーバー (Phusion 乗客) に転送しますか?もしそうなら、アプリケーションサーバーにも独自の独立したプロセスがありますか?それとも、プロセス 8391 をアプリケーション サーバー プロセスとみなして、このリクエストを単独で処理できるのでしょうか?
Apache はその背後にあるアプリケーション サーバーとどのように対話するのでしょうか?
この質問を長い間見ていましたが、その時は答えていませんでした。
Ruby 言語には http 関連の API があり、簡単な静的ファイル サーバーを自分で書くこともできます。そして、同様のサービスを提供する強力な宝石がたくさんあります。
Apache で PHP 言語を実行する最も一般的な方法は、プラグインとして実行することです。つまり、Apache は php ファイル要求に応答するように変更されます。
Rails や Thin などの Web サーバーを使用してサービスを開始することもできますが、ブラウザーと開発者の両方にとって使いやすいものではありません。
リバース プロキシを構成すると、Apache は HTTP クライアントとして機能し、同じリクエストをアプリケーション サーバーに送信し、その結果を実際のクライアントに送信します。
Apache を起動すると、10 ~ 20 を超えるプロセスが存在します (構成によって異なります)
そして、Apache がリクエストを受信した後、プロセスがそれを処理し、リバース プロキシの条件を満たす場合、リクエストはアプリケーション サーバーに送信されます
。 実際、アプリケーションサーバーには直接アクセスできる必要があります(ファイアウォールなどが存在しない限り)
とにかく、アプリケーションサーバーはリクエストを受信し、Apacheにレスポンスを送り返します
その後、Apache はブラウザーに応答を送り返します
ただし、このプロセス中に、応答の HTML の URL の書き換えを構成する必要がある場合もあります