図解で解説！！　Apache、Tomcatってなんなの？

ログイン画面出ているのに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. まずは全体のイメージを掴む

![スクリーンショット 2021-05-14 1.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/9c56655c-893b-9661-b132-5bd6c0bf712e.png)



### 【 全体図から分かること 】

- クライアントは**WEBサーバ**に対してリクエストを送るので、ApacheとTomcatがある場合にクライアントと最初に繋がるのは**Apache**になる

- リクエストに対して**Apacheから**Webアプリケーションを動作させるための実行環境である**Tomcatへ必要な処理を要求**する

- DBとTomcatの間にJAVAが有り、その**JAVAがDBをたたきにいったり、必要なテンプレートを作成したりしている。**(TomcatがDBをたたきにいくわけではないということ)


　
　
次は、**簡易的なWebサーバとしての機能も持っているTomcatあれば、Apache要らなくね？！**　という疑問を考えてみる。

ここは、エンジニアの先輩がめちゃくちゃわかりやすく教えてくれたので、その例えを使って書いていきます！！
　




##2.Apacheがないとどうなるのか？
**ホール担当のバイト（Apacheさん）と、ホールもキッチンもできるオーナー（Tomcatさん）のお話**

#### 【 少々のリクエスト＆レスポンスなら対応できる 】

![スクリーンショット 2021-05-14 2.49.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/a2f2befd-15c0-0320-d185-6daf0f29a998.png)

**クライアントからの少ない注文に対しては対応できる！！**

　


![スクリーンショット 2021-05-14 2.49.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/a9adaf3e-9c08-751d-eaca-79d2477922b8.png)
**メニューに無い注文がきたらそんなもんうちには無い！！と対応できる(404エラー)**


　

　



#### 【 沢山のリクエストが来てそのレスポンスを返さなくてはいけない場合どうなる？ 】


![スクリーンショット 2021-05-14 3.10.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/e7d4d92b-5fc5-d532-8d57-a55fcb8c6f40.png)


**当然...負担がかかることでレスポンスが遅くなり、ダウンする原因に。。**

　
　

## 3. Apache入れるとどうなるのか？

![スクリーンショット 2021-05-14 3.28.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/ac09532c-f2fb-7b9c-0815-4d8fe45e2cd4.png)


**・ 設定の柔軟性、拡張性が高くなる**
**・ サーバ負荷を減らすことで、Js、CSS,HTMLの静的コンテンツが高速化できる**
（条件によってはTomcatだけの方が早い時もあるみたい）

　
　
　
## 4.　ついでに図から404と500番系のエラーを考える

#### 【 Not Found 404エラー】
![スクリーンショット 2021-05-14 7.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/5eff21eb-9fbb-aa1c-e9ee-6b060bf23b79.png)

**〜 クライアント側に問題あり 〜**
**Apacheのリソースに無い、クライアント側の無茶振りな注文には404エラーを出す**
　
　
　
#### 【 Internal Server Error 500系のエラー】

<img width="998" alt="スクリーンショット 2021-05-14 7 59 02" src="https://user-images.githubusercontent.com/61640081/118197763-8aacd080-b48a-11eb-8742-2298a9eeee44.png">
**〜 サーバー側に問題あり 〜**
**クライアント側の要求は良いけど、サーバ側に不具合がある場合に500系のエラーを出す**
　
　

#### 【 エラー出る場所を切り分ける】

ちなみに、
Webサーバで出る404の特徴、Webコンテナで出る404特徴があります。

#### 【 Apacheがあかん時　のNot Found 404エラー】
**みんな大嫌いな真っ赤っかのエラーが出る**
　ブラウザがあかんのでリクエスト関連を見るべし！


#### 【 Tomcatがあかん時　のNot Found 404エラー】
**下のような紺色のエラーが出る**
![スクリーンショット 2021-05-15 10.12.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655853/80f8ca1e-1270-369c-767a-f1bfd65865a1.png)


#### 【 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を選択する場合：**
- 負荷が低くて、早期または簡易的なセットアップが必要な場合に向いています。
- 同時アクセスする数が少なく、単純にリクエスト数が多いような場合に向いています。