質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

apacheとtomcatについて

解決済

回答 4

投稿

  • 評価
  • クリップ 4
  • VIEW 4,344

syncrock

score 200

初歩的な質問です。
改めてapacheとtomcat、所為Webアプリケーションとは?的なことを勉強してます。
今の私の理解としてapacheとtomcat(で連携している場合)は以下のように認識しています。
・apacheがリクエストを受け、tomcatに処理を依頼する
・tomcatでサーブレットを実行
・apacheが結果をクライアントに返す
めちゃくちゃざっくりと書いてしまいましたがこんな感じでしょうか。
お客さん(クライアント)の注文をレジ(apache)が聞き、厨房(tomcat)が調理して、レジがお客さんに渡す。
みたいな認識・・・あれ、例えられてます?
すいません、逸れましたがそんな風に概要を理解しているのを前提として質問です。
tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)
基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。

また、apacheとtomcatの連携などそのあたりの詳細があるような参考サイトなどご存知でしたら教えて頂けたらと思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+5

tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)

静的コンテンツのみの場合は普通Tomcatは使わないと思いますが、Tomcatを用いて静的コンテンツを配信することは、やりたければやってもいいです。

基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。

この辺、ちょっとややこしいです。
まず、サーブレットコンテナを含む用語として「アプリケーションサーバー」というものがあります。アプリケーションサーバーとは、要はアプリケーションを動かす機能をもったサーバーのことで、Tomcat(サーブレットコンテナ)は、Javaによるサーブレットアプリケーションを動かす機能を持つサーバーなので、アプリケーションサーバーの一種と言えます。
しかし、この定義ですと、Apacheにもアプリケーションを動かす機能がある(mod_phpなどによりその機能を追加できる)ので、Apacheもアプリケーション・サーバーの一種という言い方が可能です。現に、最近はApache上でPHPを動かしながら、その前面にNginxを用いる構成も一般的なので、Nginx=Webサーバー、Apache=アプリケーションサーバーという役割分担になることも珍しくありません。Apacheがアプリケーション・サーバーだと言われると私は違和感がありますが、そのように説明している記事もあります。
しかも、多くのアプリケーションサーバーは、単体でWebサーバーとしての機能を持っています。

つまり、Webサーバーとアプリケーションサーバーは固定的なものではなく、使い方によって、同じソフトウェアがWebサーバーになったり、アプリケーションサーバーになったり、場合によってはキャッシュサーバーになるわけです。

ややこしいですか? 頭が混乱してきませんか?

では、Tomcatを使うのはどういう場合か。それは、「Javaにより開発されたWebアプリケーションを動作させる場合」です。使おうと思えば静的コンテンツをTomcatで配信できますが、Tomcatは大きなソフトウェアであり、取り扱いもApacheに比べて難しいので、わざわざTomcatで静的コンテンツのみを配信する動機がありません。

次に、TomcatとApacheを組み合わせて使う場合が多い理由についてです。

Tomcatが遅いから、と思っている人が多く、私も以前はそう思っていましたが、Tomcatハンドブック 第2版 という本には「静的コンテンツにおいてもApacheよりもTomcatの方が速い」と書いてあります。この本、実にTomcat愛に満ちた本でして、TomcatをApacheと組み合わせて使うなんてとんでもないことだ。Tomcatは完全なソフトウェアであり、Apacheで補完する必要などない、という論調だったと記憶しています。

手元に本がありませんが、上に書いたことは、以下のブログ記事に紹介されているので読んでみてください。

Tomcatのウェブサーバが、Apache httpdよりも高速に動作するという事実 | ミネルヴァの梟は黄昏とともに飛び始める(山下 大介 公式ブログ)

この記事でも引用されていますが、Tomcatの欠点として、以下が挙げられています。

  • Tomcatには、Apache httpdほど豊富な支援ソフトウェアが存在していない
  • Tomcatを熟知している人材は、Apache httpdを熟知している人材よりも少ない
  • Tomcatが提供している機能は、Apache httpdが提供している機能よりも少ない
  • Tomcatは、Apache httpdと比較して起動/停止時間が長い

加えて、今まで出てきていないポイントとして、「Tomcatは80 / 443ポートで待ち受けできない」という問題があります。やろうと思えばTomcatをrootで動かせばできる(そういうサーバーは世の中にあります)のですが、セキュリティ的に危険すぎるので、Tomcatは8080ポート等で待ち受けさせておいて、別の手段で80 / 443ポートで待ち受けします。代表的な方法がApacheを使うものですが、iptablesを使う方法もあります。最近だと、Apacheの代わりにNginxを用いる場合が多いと思います。

まとめると以下の通りです。

  • ApacheもTomcatも、Webサーバーとしての機能とアプリケーションサーバーとしての機能の両方を備える
  • Tomcatを使うのは、JavaによるWebアプリケーションを動かす場合に限られると言って良い
  • Tomcatによる静的コンテンツ配信が遅いというのは誤解も含んでいるが、現実には静的コンテンツ配信はApache(あるいはNginx)を用いる場合が多い
  • ApacheはTomcatに比べて周辺の支援ソフトウェアが豊富なので、プログラムを作らなくても拡張モジュールだけでできることが多い(のでApacheが重宝される)
  • Tomcat単体では80 / 443ポートで待ち受けできないので、Apacheを用いて80 / 443で待ち受けする場合が多い(他の方法でも可能なのでApacheが必須とまでは言えない)
  • 最近は「高速なWebサーバー」としてのApacheの地位はNginxに奪われている

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/19 16:00

    長文ありがとうございます。
    tomcat単体でもwebサーバ機能があることは知っておりましたが、逆にapacheがそのような機能を持っていることは認識不足でした。
    使い方によって役回りが変わってきますが、構成としてはそのような構成が機能面において良いのですね。

    キャンセル

+1

apacheとtomcat、両者の特徴や関係は「Tomcat」と「Apache」の違い の記事にざっくりと書かれています。
雰囲気をつかむのに良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/19 11:53

    ありがとうございます。
    記事を参照します。

    キャンセル

0

個人的には、例え話は例え話でしかないのであまり良くないかな、と。
理解しづらい場合は図解に頼るのが一番いいと思っています。

古い記事ですが、以下の図が結構端的に表現されているのではないかと思います。

https://images.app.goo.gl/xfKtzzqyq2MVuSBM9


tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)

tomcatはJSPを動作させるものですので、静的コンテンツのみでJavaのコードが含まれないサイトであれば不要ですね。

基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。

サーブレットコンテナと言うとJava感に溢れますが、だいたいその理解で合ってます。

例えば、PHPであれば、最近の流行りはWebサーバーであるnginxと、php-fpmというPHPを実行するサーブレットコンテナみたいなもので構築されることが多いです。

https://images.app.goo.gl/uQACsDsWV3tM8sSJ6

但し、nodeの場合は、Webサーバー自体もnodeで組まれているexpressというものを使うことがあり、
必ずしもWebサーバーと言語を実行する環境が分離されているわけではありません。

https://images.app.goo.gl/Hsopg7FPqmwapJoG8

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/19 11:55

    ありがとうございます。

    >サーブレットコンテナと言うとJava感に溢れますが、だいたいその理解で合ってます
    →そうですね、「サーブレット」というと。
     通常は何て呼ぶものでしょうか?Webコンテナ?単にコンテナ?
     言語によって呼び名が変わる?

    キャンセル

  • 2019/04/19 20:42

    徳丸先生が仰ってるように
    > アプリケーションサーバー
    という呼び方が良いかもしれないですね。
    「コンテナ」だと、最近だとDocker感がある気がします。

    キャンセル

0

私のブログでProxyサーバーとはの中でApache + tomcatを例にした記事があります。

Javaで作成したWebアプリの公開方法としてメジャーなApacheとtomcatの組み合わせがあります。Apacheを使用せずtomcatだけでも公開することができますが、なぜApacheを使用するかというとWeb通信の最適化を行うためです。tomcatはHTMLを平文で出力します。apacheを使用しない場合は圧縮などを行わずに通信を行います。tomcatとはJavaサーバーなので通信の最適化は得意ではありません。そこでApacheの圧縮・キャッシュなどの機能を使い最適化します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/19 15:59

    ありがとうございます。
    勉強した中にも連携させる理由としてそのようなwebサーバとしての機能性がtomcat単体よりも良いという記載がありましたが、そのようなことですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る