ログイン画面出ているのに404になった。
そこで、関連してくるApacheとTomcatについて書いていこうと思います!
はじめに
Apacheってなんだ?!
Tomcatってなんだ?!
お前達は一体どこにいるんだ?!
何をしてるんだ?!
そんなApacheとTomcatの疑問に関してまとめていきます。
※概念部分のみで、以降には技術的なコードを書いてませんのでご了承を...
環境
OS macOS Catalina バージョン10.15.7
Apacheって何?
Webサーバ用のソフトのこと
正式名称はApache HTTP Serverという
世界中で最も使用されているWebサーバソフト
Webサーバって何?
ブラウザからのHTTPリクエストに対して、HTMLファイルなどをレスポンスとして返してくれるサーバのこと
今回でいうとPCなどにApacheというWebサーバ用のソフトを入れることでWebサーバになる!
Tomcatって何?
APPサーバ(アプリケーション)
Java Servletを動かす時に使うソフトでWebコンテナのこと(サーブレットコンテナとも言う)
簡易的なWebサーバとしての機能も持っている
正式名称はApache Tomcatという
ここで疑問に思うことがありますよね!
・ ApacheはWebサーバ用のソフト
・ Tomcatも簡易的なWebサーバとしての機能も持っている
• • • ??
だったら、Tomcatあれば、Apache要らなくね?! という疑問。。
ここからはタイトルにもあった通り、図解での説明に入ります!!
図解で説明
1. まずは全体のイメージを掴む
【 全体図から分かること 】
-
クライアントはWEBサーバに対してリクエストを送るので、ApacheとTomcatがある場合にクライアントと最初に繋がるのはApacheになる
-
リクエストに対してApacheからWebアプリケーションを動作させるための実行環境であるTomcatへ必要な処理を要求する
-
DBとTomcatの間にJAVAが有り、そのJAVAがDBをたたきにいったり、必要なテンプレートを作成したりしている。(TomcatがDBをたたきにいくわけではないということ)
次は、簡易的なWebサーバとしての機能も持っているTomcatあれば、Apache要らなくね?! という疑問を考えてみる。
ここは、エンジニアの先輩がめちゃくちゃわかりやすく教えてくれたので、その例えを使って書いていきます!!
##2.Apacheがないとどうなるのか?
ホール担当のバイト(Apacheさん)と、ホールもキッチンもできるオーナー(Tomcatさん)のお話
【 少々のリクエスト&レスポンスなら対応できる 】
クライアントからの少ない注文に対しては対応できる!!
メニューに無い注文がきたらそんなもんうちには無い!!と対応できる(404エラー)
【 沢山のリクエストが来てそのレスポンスを返さなくてはいけない場合どうなる? 】
当然...負担がかかることでレスポンスが遅くなり、ダウンする原因に。。
3. Apache入れるとどうなるのか?
・ 設定の柔軟性、拡張性が高くなる
・ サーバ負荷を減らすことで、Js、CSS,HTMLの静的コンテンツが高速化できる
(条件によってはTomcatだけの方が早い時もあるみたい)
4. ついでに図から404と500番系のエラーを考える
【 Not Found 404エラー】
〜 クライアント側に問題あり 〜
Apacheのリソースに無い、クライアント側の無茶振りな注文には404エラーを出す
【 Internal Server Error 500系のエラー】
**〜 サーバー側に問題あり 〜** **クライアント側の要求は良いけど、サーバ側に不具合がある場合に500系のエラーを出す**【 エラー出る場所を切り分ける】
ちなみに、
Webサーバで出る404の特徴、Webコンテナで出る404特徴があります。
【 Apacheがあかん時 のNot Found 404エラー】
みんな大嫌いな真っ赤っかのエラーが出る
ブラウザがあかんのでリクエスト関連を見るべし!
【 Tomcatがあかん時 のNot Found 404エラー】
【 JAVAがあかん時 のNot Found 404エラー】
(例)
ログイン画面は表示できているけど、ログインボタン押すと404が発生する時など
おまけ
ちなみに、Apache以外のWebサーバ用のソフトっていうとこんなのがあるみたい
- IIS(アイアイエス) : Windowsの標準Webサーバソフト
-
nginx(エンジンエックス) : 大規模システムに使われるWebサーバソフト
##ApacheとNginxの使い分けって?
Apache | Nginx | |
---|---|---|
アクセス急増時のサーバーへの負荷 | いっきに負荷増 | アクセスに比例して負荷は急激に増えない |
その結果Webサーバーの動き | 遅くなり、ダウンしやすくなる | 処理速度は維持し、ダウンしにくい |
※RailsだとNginxが使われることが多い.....みたい。
##ApacheとNginxの使い分けポイント
ApacheとNginxでは駆動方式が違います。
Apacheは、マルチプロセスのプロセス駆動アーキテクチャ
Nginxはシングルスレッドモデルのイベント駆動アーキテクチャ
Nginxを選択する場合:
- 負荷が高くて、スケーラビリティが要求されるような場合に向いています。
- 静的ページに同時多数のアクセスが想定されるような場合に向いています。
(ただ、NginxはCPUリソースがたくさん必要な処理には向いてないようです)
Apacheを選択する場合:
- 負荷が低くて、早期または簡易的なセットアップが必要な場合に向いています。
- 同時アクセスする数が少なく、単純にリクエスト数が多いような場合に向いています。