Apache HTTP ServerとApache Tomcatの違いとセットアップ方法を徹底解説

Apache HTTP ServerとApache Tomcatは、Webサービスの提供において重要な役割を担うサーバーソフトウェアです。多くのWebサイトやアプリケーションで利用されており、それぞれ異なる特性を持っています。

Apache HTTP Server(通称Apache)は、静的なコンテンツ(HTML、CSS、画像など)の配信を主な目的としたWebサーバーです。一方、Apache TomcatはJava ServletやJavaServer Pages(JSP)を動作させるアプリケーションサーバーで、動的なWebアプリケーションを実行するために用いられます。

この違いを理解することは、適切なサーバー構成やアプリケーションの設計に役立ちます。本記事では、Apache HTTP ServerとApache Tomcatの役割の違いを明確にし、それぞれのセットアップ方法を詳しく解説します。さらに、両者を連携させる方法や実運用でのトラブルシューティングについても掘り下げていきます。

目次

Apache HTTP Serverとは


Apache HTTP Server(以下Apache)は、世界で最も広く利用されているWebサーバーソフトウェアの一つです。静的コンテンツ(HTML、CSS、JavaScript、画像など)をクライアントに配信する役割を担い、高速かつ安定した動作が特徴です。

Apacheの主な役割


Apacheは主に以下のような役割を果たします。

  • 静的ファイルの配信:WebサイトのHTMLや画像をリクエストに応じてクライアントへ送信します。
  • リバースプロキシ:バックエンドのアプリケーションサーバーへのリクエストを仲介し、負荷分散やセキュリティ強化に貢献します。
  • モジュールによる拡張性:必要な機能をモジュールとして追加でき、アクセス制御やキャッシュ、SSL対応など多岐にわたる機能を持たせられます。

Apacheの特徴

  • 高い安定性と信頼性:長年の運用実績があり、大規模なWebサイトでも安定した稼働が可能です。
  • オープンソース:ライセンス料が不要で、コミュニティによる継続的な開発とサポートが行われています。
  • クロスプラットフォーム対応:Windows、Linux、macOSなど多くのプラットフォームで動作します。

Apacheはシンプルでありながら非常に柔軟性が高く、様々な用途で利用できるため、多くの企業や開発者がWebサーバーとして選択しています。

Apache Tomcatとは


Apache Tomcatは、Javaアプリケーションを実行するためのサーバーであり、特にJava ServletやJavaServer Pages(JSP)を処理することに特化したアプリケーションサーバーです。Apache Software Foundationによって開発・管理されており、軽量でありながら強力な機能を備えています。

Tomcatの主な役割


Tomcatは以下の役割を果たします。

  • Java Servletの実行:Javaで記述されたサーバーサイドのプログラム(Servlet)を処理し、動的なWebアプリケーションを提供します。
  • JSPの実行:HTMLにJavaコードを埋め込んだJSPファイルをコンパイル・実行し、動的なWebページを生成します。
  • HTTPリクエストの処理:クライアントからのリクエストを受け取り、ServletやJSPを通してレスポンスを生成して返します。

Tomcatの特徴

  • 軽量で高速:必要最小限の機能で動作し、比較的軽量なためセットアップも簡単です。
  • Java EEの一部をサポート:完全なJava EE(Jakarta EE)アプリケーションサーバーではありませんが、ServletやJSPなどの基本的なJava EE技術を提供します。
  • 柔軟なデプロイ:WARファイル(Web Application Archive)形式でのアプリケーションデプロイが容易で、ホットデプロイ機能により迅速なアプリケーションの更新が可能です。

Tomcatの主な用途

  • Webアプリケーションの開発・運用
  • REST APIサーバーの構築
  • テスト環境や開発環境での利用

Tomcatは、シンプルな構成でありながら、Javaアプリケーションの開発・運用において重要な役割を果たします。多くのエンタープライズ環境で利用されており、Java開発者にとっては欠かせないツールとなっています。

Apache HTTP ServerとTomcatの主な違い


Apache HTTP ServerとApache Tomcatは、Webサーバーとして広く利用されていますが、対象とするコンテンツや処理方法に大きな違いがあります。ここでは、両者の主な違いを明確にし、用途に応じた選択のポイントを解説します。

1. 処理対象の違い

  • Apache HTTP Server
  • 静的コンテンツ(HTML、CSS、JavaScript、画像など)を主に処理。
  • サーバーサイドスクリプト(PHP、Perlなど)の実行環境としても利用可能(mod_phpやmod_perlなどのモジュールを通じて)。
  • Apache Tomcat
  • 動的コンテンツを生成するJavaアプリケーションを処理。
  • Java ServletやJSPを通じて、リクエストに応じた動的なWebページを生成。

2. アーキテクチャの違い

  • Apache HTTP Server
  • リクエストを受け取り、静的ファイルをそのままクライアントに返すシンプルな構造。
  • モジュールによって機能を拡張可能(SSL、キャッシュ、プロキシ機能など)。
  • Apache Tomcat
  • Java VM上で動作し、Java Servletコンテナがリクエストを処理。
  • Javaアプリケーションが動的にページを生成してレスポンスを返す。

3. 使用例とユースケース

  • Apache HTTP Serverの用途
  • 静的なWebサイトやブログのホスティング。
  • CDN(コンテンツデリバリネットワーク)のフロントエンド。
  • リバースプロキシサーバーとしての活用。
  • Apache Tomcatの用途
  • JavaベースのWebアプリケーションの運用。
  • REST APIの提供。
  • JSP/Servletを用いた企業内システムの運用。

4. パフォーマンスとスケーラビリティ

  • Apache HTTP Server:大量の静的コンテンツ配信に最適で、軽量かつ高速。
  • Apache Tomcat:Javaアプリケーションの処理が必要な場合はTomcatが適切。

5. 連携方法


Apache HTTP ServerとTomcatは、mod_proxymod_jkなどを使用して連携することで、静的コンテンツをApache HTTP Serverが、動的コンテンツをTomcatが処理するハイブリッドな環境を構築できます。

このように、両者は補完関係にあり、適切に使い分けることで効率的なWebシステムを構築できます。

Apache HTTP Serverのセットアップ方法


Apache HTTP Serverのセットアップは比較的簡単で、多くのOSでサポートされています。以下では、LinuxおよびWindows環境でのインストール手順を解説します。

Linux環境でのインストール


1. パッケージのインストール
Linuxでは、パッケージマネージャーを使用してApacheをインストールできます。

  • Debian/Ubuntu系:
sudo apt update
sudo apt install apache2
  • CentOS/RHEL系:
sudo yum install httpd

2. サーバーの起動と自動起動の設定

  • Debian/Ubuntu系:
sudo systemctl start apache2
sudo systemctl enable apache2
  • CentOS/RHEL系:
sudo systemctl start httpd
sudo systemctl enable httpd

3. ファイアウォールの設定

  • ポート80を許可:
sudo ufw allow 'Apache'
sudo ufw reload

Windows環境でのインストール


1. Apache公式サイトからダウンロード
Apache Lounge からWindows版のバイナリをダウンロードします。

2. 解凍と配置
ダウンロードしたZIPファイルを解凍し、C:\Apache24などのディレクトリに配置します。

3. Apacheの設定ファイル(httpd.conf)の編集
C:\Apache24\conf\httpd.confを開き、必要に応じて以下を編集します。

  • サーバールートの指定:
ServerRoot "C:/Apache24"
  • ドキュメントルートの指定:
DocumentRoot "C:/Apache24/htdocs"

4. Apacheのインストールとサービス登録
コマンドプロンプトを管理者権限で開き、以下を実行します。

cd C:\Apache24\bin
httpd.exe -k install

5. サーバーの起動

httpd.exe -k start

Apacheの動作確認


ブラウザで http://localhost にアクセスし、「It works!」と表示されればセットアップは完了です。

初期設定の確認ポイント

  • 80番ポートが他のプロセスに占有されていないか確認
  • httpd.confでのポート設定を必要に応じて変更
  • エラーログ(logs/error.log)を確認して問題がないか確認

Apache HTTP Serverのセットアップはシンプルですが、正しい設定を行うことで安定したWebサーバー環境を構築できます。

Apache Tomcatのセットアップ方法


Apache Tomcatのセットアップは、Javaアプリケーションを実行するために必要な手順です。以下では、LinuxおよびWindows環境でのインストールと基本的な設定方法を解説します。

事前準備


Tomcatの実行にはJava環境(JDK)が必要です。インストールされていない場合は、以下のコマンドでJDKをインストールします。

  • Debian/Ubuntu系:
sudo apt update
sudo apt install openjdk-11-jdk
  • CentOS/RHEL系:
sudo yum install java-11-openjdk

Windowsでは、Oracle公式サイトからJDKをダウンロードしてインストールします。

Linux環境でのTomcatインストール


1. Tomcatのダウンロード
公式サイトからTomcatの最新版をダウンロードします。

wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.70/bin/apache-tomcat-9.0.70.tar.gz

2. 解凍と配置

tar -xvzf apache-tomcat-9.0.70.tar.gz
sudo mv apache-tomcat-9.0.70 /usr/local/tomcat9

3. 実行権限の付与

sudo chmod +x /usr/local/tomcat9/bin/*.sh

4. Tomcatの起動

sudo /usr/local/tomcat9/bin/startup.sh

5. 自動起動の設定
/etc/systemd/system/tomcat.serviceを作成し、以下を記述します。

[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh

[Install]
WantedBy=multi-user.target


サービスの登録と起動:

sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat

Windows環境でのTomcatインストール


1. Tomcat公式サイトからダウンロード
Apache Tomcat公式サイト からWindows版のTomcatをダウンロードします。

2. 解凍と配置
ダウンロードしたZIPファイルを解凍し、C:\Tomcat9などのディレクトリに配置します。

3. Java環境変数の設定
環境変数に以下を追加します。

JAVA_HOME=C:\Program Files\Java\jdk-11
CATALINA_HOME=C:\Tomcat9
PATH=%CATALINA_HOME%\bin

4. Tomcatの起動
コマンドプロンプトで以下を実行します。

cd C:\Tomcat9\bin
startup.bat

Tomcatの動作確認


ブラウザで http://localhost:8080 にアクセスし、「Apache Tomcat」の管理画面が表示されればセットアップ完了です。

初期設定のポイント

  • 8080ポートが他のアプリケーションに使用されていないか確認
  • conf/server.xmlでポート番号を変更可能。
  • アクセス制限を解除する場合は、conf/tomcat-users.xmlを編集して管理者ユーザーを追加します。

Tomcatのセットアップは簡単ですが、適切な権限設定とセキュリティ設定を行うことで、安全で安定した運用が可能になります。

Apache HTTP ServerとTomcatの連携方法


Apache HTTP ServerとTomcatを連携させることで、静的コンテンツはApache HTTP Serverが処理し、動的コンテンツ(ServletやJSP)はTomcatが処理するハイブリッドな環境を構築できます。この連携により、サーバーの負荷分散やパフォーマンスの向上が期待できます。

ここでは、mod_jkmod_proxyの2つの方法を使った連携手順を解説します。

方法1: mod_jkを使った連携


mod_jkは、Apache HTTP ServerとTomcat間でリクエストを転送するためのモジュールです。

1. mod_jkのインストール

  • Debian/Ubuntu系:
sudo apt install libapache2-mod-jk
  • CentOS/RHEL系:
sudo yum install mod_jk

2. workers.propertiesの設定
/etc/libapache2-mod-jk/workers.propertiesを編集し、Tomcatへの接続情報を記述します。

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

3. Apacheの設定ファイルを編集
/etc/apache2/sites-available/000-default.confまたはhttpd.confに以下を追加します。

JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkMount /app/* worker1

4. Tomcat側の設定
conf/server.xmlでAJPコネクタを有効にします。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

5. Apacheの再起動

sudo systemctl restart apache2
sudo systemctl restart tomcat

これで、http://localhost/appへのアクセスがTomcatに転送されます。

方法2: mod_proxyを使った連携


mod_proxyは、リバースプロキシとしてTomcatにリクエストを転送する方法です。シンプルで設定が容易なため、広く利用されています。

1. mod_proxyのインストール

  • Debian/Ubuntu系:
sudo a2enmod proxy proxy_http
  • CentOS/RHEL系:
sudo yum install mod_proxy

2. Apacheの設定ファイルを編集
/etc/apache2/sites-available/000-default.confまたはhttpd.confに以下を追加します。

<VirtualHost *:80>
    ProxyPass /app http://localhost:8080/app
    ProxyPassReverse /app http://localhost:8080/app
</VirtualHost>

3. Tomcat側の設定
conf/server.xmlでTomcatが8080番ポートで動作していることを確認します。

4. Apacheの再起動

sudo systemctl restart apache2
sudo systemctl restart tomcat

これで、Apacheがフロントエンドとして動作し、Tomcatへのリクエストを転送します。

mod_jkとmod_proxyの違い

  • mod_jk:AJPプロトコルを使用し、高速な通信が可能。細かい設定が可能で、大規模システム向け。
  • mod_proxy:HTTPプロトコルを使用し、設定がシンプルで導入しやすい。小規模から中規模向け。

プロジェクトの規模や要件に応じて適切な方法を選択しましょう。

トラブルシューティングとよくあるエラー


Apache HTTP ServerやTomcatのセットアップや連携時には、様々なエラーが発生する可能性があります。ここでは、よくあるエラーとその解決方法を紹介します。

1. Apache HTTP Serverのよくあるエラー


1.1. ポート競合エラー
エラー内容:

(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80


原因: ポート80が他のプロセスで使用されています。
解決方法:

sudo netstat -tuln | grep :80
sudo kill <PID>
sudo systemctl restart apache2


ポートを変更する場合は/etc/apache2/ports.confでポート番号を編集します。

1.2. 権限エラー
エラー内容:

Forbidden - You don't have permission to access this resource.


原因: DocumentRootのパーミッションが不足しています。
解決方法:

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

1.3. 設定ミスによる起動失敗
エラー内容:

AH00526: Syntax error on line X of /etc/apache2/apache2.conf


原因: 設定ファイルに誤りがあります。
解決方法:

sudo apachectl configtest


エラーのある行を修正し、再起動します。

2. Tomcatのよくあるエラー


2.1. 8080ポートの競合エラー
エラー内容:

Address already in use: bind: 8080


原因: 他のプロセスが8080ポートを使用しています。
解決方法:

sudo netstat -tuln | grep :8080
sudo kill <PID>


または、conf/server.xmlで以下のようにポート番号を変更します。

<Connector port="8081" protocol="HTTP/1.1" />

2.2. デプロイエラー
エラー内容:

SEVERE: Error deploying web application directory /usr/local/tomcat/webapps/app


原因: アプリケーションのWARファイルが破損しているか、依存関係が不足しています。
解決方法:
WARファイルを再ビルドし、/usr/local/tomcat/webappsに再配置します。

2.3. メモリ不足エラー
エラー内容:

java.lang.OutOfMemoryError: Java heap space


原因: Tomcatのメモリ設定が不足しています。
解決方法:
setenv.shまたはcatalina.shに以下を追加します。

export CATALINA_OPTS="-Xms512m -Xmx1024m"

3. ApacheとTomcat連携時のエラー


3.1. 502 Bad Gatewayエラー
原因: Tomcatが起動していないか、AJPコネクタが無効です。
解決方法:

  • Tomcatが起動していることを確認します。
sudo systemctl status tomcat
  • AJPコネクタが有効か確認し、server.xmlの該当箇所が以下のようになっていることを確認します。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

3.2. 404エラー
原因: TomcatのWebアプリケーションが正しくデプロイされていません。
解決方法:

  • webappsフォルダ内にWARファイルが存在することを確認します。
  • Tomcatのログcatalina.outを確認し、デプロイエラーがないかを確認します。

4. ログでエラーを確認する方法

  • Apacheのログ/var/log/apache2/error.log
  • Tomcatのログ/usr/local/tomcat/logs/catalina.out

エラーログをこまめに確認することで、問題を迅速に特定し解決できます。

運用とパフォーマンスチューニング


Apache HTTP ServerとTomcatの安定した運用には、適切なチューニングとセキュリティ対策が欠かせません。ここでは、運用中にパフォーマンスを最大化する方法と、セキュリティ向上のための設定を紹介します。

1. Apache HTTP Serverのパフォーマンスチューニング

1.1. KeepAliveの有効化
KeepAliveを有効にすると、同一クライアントとの接続を維持し、複数のリクエストを処理できます。これにより、接続確立のオーバーヘッドが削減されます。
/etc/apache2/apache2.confまたはhttpd.confに以下を追加します。

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

1.2. マルチプロセッシングモジュール(MPM)の最適化
MPMはApacheのリクエスト処理モデルを決定します。event MPMは非同期処理で効率が良いため推奨されます。

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2


mpm_event.confで以下の設定を調整します。

<IfModule mpm_event_module>
    StartServers 2
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadLimit 64
    ThreadsPerChild 25
    MaxRequestWorkers 150
</IfModule>

1.3. キャッシュの設定
mod_cacheを有効にし、静的ファイルのキャッシュを行うことで、応答時間を短縮します。

sudo a2enmod cache
sudo a2enmod cache_disk


/etc/apache2/mods-enabled/cache.confに以下を追加します。

CacheEnable disk /
CacheRoot /var/cache/apache2
CacheDirLevels 2
CacheDirLength 1

2. Tomcatのパフォーマンスチューニング

2.1. Javaヒープサイズの最適化
Tomcatがメモリ不足になるとパフォーマンスが低下します。ヒープサイズを適切に設定することでメモリ管理が改善します。
setenv.shまたはcatalina.shに以下を追加します。

export CATALINA_OPTS="-Xms512m -Xmx2048m"

2.2. コネクタのチューニング
Tomcatのconf/server.xmlで、最大スレッド数や接続数を調整します。

<Connector port="8080" protocol="HTTP/1.1"
           maxThreads="200"
           connectionTimeout="20000"
           redirectPort="8443" />

2.3. gzip圧縮の有効化
クライアントへのレスポンスをgzip圧縮することで、転送データ量を削減します。
conf/web.xmlに以下を追加します。

<filter>
    <filter-name>gzipFilter</filter-name>
    <filter-class>org.apache.catalina.filters.GzipFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>gzipFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. セキュリティ強化のための設定

3.1. Apacheのバナー情報を隠す
Apacheのバージョン情報は攻撃の対象となる可能性があります。
/etc/apache2/conf-enabled/security.confを編集し、以下を追加します。

ServerTokens Prod
ServerSignature Off

3.2. Tomcatの管理ツールのアクセス制限
Tomcat Managerアプリケーションへのアクセスを制限します。
conf/tomcat-users.xmlに管理者アカウントを追加します。

<role rolename="manager-gui"/>
<user username="admin" password="strongpassword" roles="manager-gui"/>

3.3. HTTPSの導入
Let’s Encryptを利用して無料でSSL証明書を取得し、HTTPS通信を有効にします。

sudo apt install certbot python3-certbot-apache
sudo certbot --apache

4. ログのローテーションと監視


Apacheログのローテーション

sudo nano /etc/logrotate.d/apache2


以下の設定を追加します。

/var/log/apache2/*.log {
    weekly
    rotate 52
    compress
    missingok
    notifempty
}

Tomcatログの監視
conf/logging.propertiesでログレベルを調整します。

org.apache.catalina.level = INFO
org.apache.coyote.level = WARN

5. 負荷分散とスケールアウト


Apache HTTP Serverをリバースプロキシとして構成し、複数のTomcatインスタンスへ負荷分散を行います。
httpd.confに以下を追加します。

<Proxy balancer://mycluster>
    BalancerMember http://localhost:8080
    BalancerMember http://localhost:8081
</Proxy>

ProxyPass /app balancer://mycluster
ProxyPassReverse /app balancer://mycluster

これにより、複数のTomcatインスタンス間でリクエストが分散され、スケールアウトが可能になります。

まとめ


本記事では、Apache HTTP ServerとApache Tomcatの違い、セットアップ方法、連携手順、トラブルシューティング、そして運用・パフォーマンスチューニングについて詳しく解説しました。

Apache HTTP Serverは静的コンテンツの配信に特化し、TomcatはJavaアプリケーションの動的コンテンツを処理します。それぞれの役割を理解し、適切に使い分けることでWebサーバーのパフォーマンスとセキュリティを大幅に向上させることができます。

また、両者を連携させることで、効率的かつ柔軟なWebアプリケーション環境を構築でき、負荷分散やスケールアウトにも対応可能です。

適切なチューニングと運用によって、ApacheとTomcatのポテンシャルを最大限に引き出し、安定したWebサービスを提供しましょう。

コメント

コメントする

目次