質問: 動的ページの表示の仕組みについて質問です。 動的ページ生成の仕組みを以下のサイトを参考に調べております。 これによると、動的ページ表示の際、以下のような流れになっているかと思います。 ``` クライアント⇆Webサーバ⇆APサーバ(ここでHTML生成) ``` これまで、Webサーバの役割として、 静的ファイル(HTML,CSS,JavaScriptなど)を保持し、クライアントからのリクエストに応じてその静的ファイルの中で動的に変化させる部分のみAPサーバに処理をリクエストする、というものだと思っておりました。 しかし、`クライアント⇆Webサーバ⇆APサーバ(ここでHTML生成)`の流れでWebページを表示するということは、Webサーバはリバースプロキシのような役割を担っているという事なのでしょうか。 動的ページ表示の際のWebサーバの役割・静的ファイル(HTMLファイルなど)の置き場所などが分からず、質問させていただきました。
回答: まず最初に、記事の読み取り方に軽い誤りがあるようです。 > > これによると、動的ページ表示の際、以下のような流れになっているかと思います。 > > `クライアント⇆Webサーバ⇆APサーバ(ここでHTML生成)` > > > これはリンク先記事の「アプリケーションサーバーでアプリケーションを実行」の部分だけを要約したものですね。 該当記事は「Javaを用いたWebアプリケーションの開発」と明示しているので、その部分が強調されていますが、それだけではありません。ご質問内には特に「Javaを用いたWebアプリケーションの開発」に絞るような記述は見られませんし、いろいろなやり方を理解した上で論じる必要がありそうに思います。 1.Webサーバだけで完結する =============== ``` +----------+ +--------------+ |クライアント|⇆|Webサーバ | +----------+ |(静的コンテンツ)| |←自前で処理 | |(動的コンテンツ)| |←自前でHTML生成 | +--------------+ ``` リンク先記事中で「Webサーバー内でアプリケーションを実行」と紹介されている方法ですね。ApacheにPHPモジュールを組み込んだ場合や、Tomcatを静的コンテンツ取得にも使う場合、なんかがこれにあたります。 2. 動的コンテンツのみAPPサーバに処理を委譲 ======================== (APサーバというのは「アプリケーションサーバ」の意味でよく使われる略記なんですが、「APIサーバ」なんて言葉もあって混同しそうに感じたので、APPサーバにしときました。) ``` +----------+ +--------------+ |クライアント|⇆|Webサーバ | +----------+ |(静的コンテンツ)| |←自前で処理 | |(動的コンテンツ)|⇆+--------------+ | | |APPサーバ | +--------------+ |←動的HTML生成 | +--------------+ ``` 記事中で「アプリケーションサーバーでアプリケーションを実行」としてメインで語られている方式ですね。CGIのように「Webサーバ内で、Webサーバとは独立した別プロセスとして実行される」と言った場合、1.と2.のどちらに分類するかは微妙なんですが。 3. 静的コンテンツも別Webサーバに委譲する ======================= ``` +----------+ +--------------+ +--------------+ |クライアント|⇆|Webサーバ1 | |Webサーバ2 | +----------+ |(静的コンテンツ)|⇆|←静的コンテンツ | | | +--------------+ |(動的コンテンツ)|⇆+--------------+ | | |APPサーバ | +--------------+ |←動的HTML生成 | +--------------+ ``` 入門記事なんかではあまりみませんが、実際にサービスを行っているWebサービスでは実はかなりよくみられる構成です。 この場合、Webサーバ1はほぼ完全にリバースプロキシ的に働いている訳ですが、エラーページや何かを表示する際には、簡単な静的コンテンツを返す、なんて使われ方をする場合もあるので、表記としては「Webサーバ」のままにしときました。 従って、***Webサーバはリバースプロキシのような役割を担っているという事なのでしょうか*** に対しては、 (2.の動的コンテンツの場合や3.のような構成の場合には)**Yes** と言うことになります。Apacheなどの主要なWebサーバ用ソフトはこう言った「リバースプロキシのような役割」を実行できるようになっています。 ただ、「静的ファイル(HTMLファイルなど)の置き場所などが分からず」に関しては、一般的なWebサービスのサーバ構成を考えても千差万別ですので、どんなソフトを使ってどんなシステム構成でWebサービスを作ることになるのかが決まってから、具体的なシステム構成に従ってご質問された方がより有益な回答が得られそうに思います。