【社内勉強会】ApacheとTomcat(2017/03/09)

# 0.はじめに

--------------------------
## 対象者
* Apache or Tomcatを使っている人
* ApacheとTomcatの違いがよく分からない人

--------------------------
## 伝えたいこと
* AapcheとTomcatの違い
* ApacheとTomcatを連携している理由
* ApacheとTomcatの設定方法

--------------------------
## 目次
1. ApacheとTomcatの概要
2. Apache, Tomcatでのシステム構成
3. Apache(とTomcat)の設定方法
4. 付録



--------------------------
# 1. ApacheとTomcatの概要

--------------------------
## Apacheとは？
Webサーバ用のソフト。
正式名称は「Apache HTTP Server」。
初版は1995年。
最新バージョンは2.4。

--------------------------
## Webサーバとは？ 

ブラウザからのHTTPリクエストに対して、HTMLファイルなどを渡すサーバ。
簡単に書くと「Webサービスを置くサーバ」。

※参考サイト : http://wa3.i-3-i.info/word12465.html

--------------------------
## Tomcatとは？
サーブレットコンテナ（Java Serveletを動かすソフト）。
正式名称は「Apache Tomcat」。
初版は1999年。
最新バージョンは8.5。
簡易的なWebサーバとしての機能も持つ。

--------------------------
## Java Servletとは？
Java Servletを動かすためのソフト。
サーバ上で動くJavaプログラム 。動的なページが生成可能。

```java
public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Hello World!</title>");
    //～HTMLを出力～
    out.close();
  }
}
```


--------------------------
### [補足] JSPと Terasolunaフレームワーク

* JSPはコンパイルするとServletになる。（Tomcatのworkディレクトリで確認可能）
* Terasolunaフレームワークは(strutsベース)は、Servletを簡単に書けるようにしたもの（ざっくり）

本スライドでは、JSPもTerasolunaもServletとみなして差支えないです。

--------------------------
## ApacheとTomcatの比較

* Apache: Webサーバソフト
* Tomcat: Java Servletを動かすためのソフト AND 簡易Webサーバソフト

[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](http://wa3.i-3-i.info/diff184web.html)


--------------------------
# 2. Apache, Tomcatでのシステム構成


-------------------------
## Tomcatのみの構成

～図作成中～

Tomcatの役割は「Webサーバ」と「サーブレットコンテナ」。

-------------------------
## Apacheと連携した構成

～図作成中～

Apacheの役割は「Webサーバ」。
Tomcatの役割は「サーブレットコンテナ」。

-------------------------
### Apacheと連携するメリット

* 静的コンテンツ(js,css,html)はApacheの方が高速？（後述）
* 設定の柔軟性、拡張性はApacheの方が高い


http://fa11enprince.hatenablog.com/entry/2015/01/19/233740

-------------------------
### [補足] Apacheと連携すると本当に速いのか？

条件によってはTomcatの方が速い場合がある。
高速性はApache連携する理由にはならない。

>Tomcat can perform at httpd speeds when using the proper connector (APR with sendFile enabled). Speed should not be considered a factor when choosing between Apache httpd and Tomcat

https://wiki.apache.org/tomcat/FAQ/Connectors#Q3 から引用


-------------------------
## システムの構成例

画像ファイルはファイルサーバで管理。
ファイルサーバにもApacheを導入。



-------------------------
# 3. Apache(とTomcat)の設定方法



-------------------------
## Apacheの設定方法


-------------------------
## Apacheの設定ファイル

* [Apache_HOME]/conf/httpd.conf : 全体の設定ファイル

-------------------------
## Apacheの基本構文

「ディレクティブ（設定項目）　引数（設定内容）」

```
# ドキュメントルートを"C:/xampp/htdocs"にする
DocumentRoot "C:/xampp/htdocs"
```


-------------------------
### コンテナ指示子
設定範囲を限定したい場合に使用する。
指定しない場合は、サーバ全体に影響する。

```
# "C:/xampp/htdocs"ディレクトリに対して処理
<Directory "C:/xampp/htdocs">
  # ～設定処理～
</Directory>
```

`<Files>`, `<Location>`などのコンテナ指示子がある。

-------------------------
### [補足] コンテナ指示子の応用

ワイルドカード、正規表現も使用できる。
コンテナ指示子のネストも可能。

```
<Directory "C:/xampp/htdocs">
  <Files *.html>
    # ～設定処理～
  </Files>
</Directory>
```


--------------------------
## 画像の直接アクセス禁止

リクエストヘッダの「Referer」で、直接アクセスかどうかを判断する。
リクエストヘッダの「Referer」は、リンク元のURLが設定されている。

```
<Directory  "C:/xampp/htdocs">
   # HTTPリクエストヘッダのRefererがAPサーバならば、環境変数「check」を設定する
    SetEnvIf Referer "http://sample.co.jp/" check
    # [禁止]、[許可]の順に評価する
    Order deny,allow
    # 1. すべてのアクセスを禁止する
    Deny from all
    # 2. 環境変数に設定されたホストからのアクセスのみ許可する
    Allow from env=check
</Directory>
```



--------------------------
### [補足] httpd.confの構文チェック

Apacheの起動に失敗したら、以下のコマンドでhttpd.confの構文チェックをしましょう！

```bat
%APCHE_HOME%\bin\httpd.exe -t
```



--------------------------
## Tomcatの設定ファイル

 [TOMCAT_HOME]/confディレクトリ配下　

* server.xml : 主要な設定ファイル。コンテキストパスやApache連携用の設定など。
* tomcat-users.xml : Tomcat Manager用のファイル

ウチのシステムでは、今後Tomcatの設定ファイルを修正する可能性は低いので、
設定方法は省略します。

--------------------------
# 4. 付録


--------------------------
## Apache以外のWebサーバソフト

* IIS: Windowsの標準Webサーバーソフトウエア
* nginx: 大規模システムでシェアを伸ばしているソフト

--------------------------
## Tomcat以外のサーブレットコンテナ

* GlassFish
* JBoss
* Jetty


--------------------------
## Tomcatの意味

1. 雄猫
2. ((俗)) 女の尻を追い回す男，女たらし.
3. ((T-)) 〔軍事〕 トムキャット：米海軍艦上戦闘機 F-14の愛称.

[goo辞書](http://dictionary.goo.ne.jp/ej/86954/meaning/m0u/)

--------------------------
### Apacheの意味
1. アパッチ族［米国南西部のインディアンの一族］
2. 【軍事】アパッチ［陸軍の２人乗り攻撃ヘリコプター］

[goo辞書](http://dictionary.goo.ne.jp/edc/15000357900/meaning/m0u/apache/)


-------------------------
# おわり