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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

4回答

2381閲覧

apacheとtomcatについて

syncrock

総合スコア209

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

2グッド

5クリップ

投稿2019/04/19 01:09

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

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

kanouao, milton_rb4life👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

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 06:22

編集2019/04/19 06:26
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2019/04/19 07:00

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

0

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

投稿2019/04/19 01:22

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2019/04/19 02:53

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

0

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

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

投稿2019/04/19 05:17

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2019/04/19 06:59

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

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 02:18

編集2019/04/19 02:19
sansaisoba

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2019/04/19 02:55

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

2019/04/19 11:42

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問