Apache
Tomcat
勉強会

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

More than 1 year has passed since last update.

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プログラム 。動的なページが生成可能。

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用語辞典


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の構文チェックをしましょう!

%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辞書


Apacheの意味

  1. アパッチ族[米国南西部のインディアンの一族]
  2. 【軍事】アパッチ[陸軍の2人乗り攻撃ヘリコプター]

goo辞書


おわり