【プログラミング】【java】ApatchとTomcat連携によるJavaアプリケーション動作フロー - j-komatsu/myCheatSheet GitHub Wiki
ApatchとTomcat連携によるJavaアプリケーション動作フロー
前提条件
- サーバー構成: Apatchをフロントエンドサーバー、Tomcatをアプリケーションサーバーとして使用。
- アプリケーションフレームワーク: Spring Bootを利用。
- データベース: Oracleを使用(接続設定はSpring Bootの
application.properties
で管理)。 - 通信プロトコル: AJP (Apache JServ Protocol) を使用してApatchとTomcatを連携。
- 開発環境: Eclipseベース。
概要
このチートシートでは、Apatchをフロントエンドサーバー、Tomcatをアプリケーションサーバーとして、静的ファイル配信、APIリクエスト処理、データベースアクセスを連携させる設定や動作フローを解説します。対象はSpring Bootアプリケーションです。
設定ファイル
1. Apatch設定
ApatchがTomcatと連携するために必要な設定です。
httpd.conf
またはworkers.properties
# 必要なモジュールを有効化
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# AJPプロトコルでTomcatにリクエストを転送
ProxyPass /app ajp://localhost:8009/app
ProxyPassReverse /app ajp://localhost:8009/app
ProxyPass
/ProxyPassReverse
:/app
で始まるリクエストをTomcatへ転送。- 注意:
/app
はプロジェクトに応じて変更可能。
必要に応じた設定変更
# デフォルトでは8009を使用。変更する場合:
ProxyPass /app ajp://localhost:<custom-port>/app
localhost
とは?- サーバー自身を指す特別なアドレス。サーバーがリモートに存在する場合は、そのサーバーのIPアドレス(例:
192.168.1.100
)を指定します。
- サーバー自身を指す特別なアドレス。サーバーがリモートに存在する場合は、そのサーバーのIPアドレス(例:
2. Tomcat設定
TomcatがApatchからのAJPリクエストを受け取るための設定です。
server.xml
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- ポート番号: デフォルトの
8009
を使用。変更が必要な場合はApatch側も合わせて修正してください。 redirectPort
: HTTPSリダイレクトを指定(必要に応じて設定)。- 別サーバー構成: ApatchとTomcatが別サーバーに配置されている場合、Apatchの
ProxyPass
設定にTomcatのIPアドレスを指定します。
例:
ProxyPass /app ajp://192.168.1.100:8009/app
ProxyPassReverse /app ajp://192.168.1.100:8009/app
3. Spring Boot設定
Spring BootアプリケーションがOracleデータベースに接続するための設定です。
application.properties
# データベース接続情報
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=your_username
spring.datasource.password=your_password
# JPA設定
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.datasource.url
: Oracleの接続URL(デフォルト: ローカルホスト)。- 別サーバーにデータベースがある場合は、そのIPアドレスを指定します(例:
jdbc:oracle:thin:@192.168.1.200:1521:xe
)。
- 別サーバーにデータベースがある場合は、そのIPアドレスを指定します(例:
spring.datasource.username
/password
: データベースのユーザー情報。spring.jpa.hibernate.ddl-auto
: テーブルの自動更新設定。
動作フロー
以下はブラウザリクエストからレスポンス返却までの一連の流れです。
1. 静的ファイル配信
- ユーザーがブラウザで
http://example.com/index.html
にアクセス。 - Apatchが静的ファイル(HTML/画像)を直接返却。
2. APIリクエスト処理
- ユーザーが
http://example.com/api/user
にリクエスト。 - ApatchがAJP経由でリクエストをTomcatへ転送。
- TomcatがSpring Bootアプリケーションを起動し、リクエストを処理。
- Spring Bootがデータベースにアクセス(例: ユーザー情報の取得)。
- Tomcatを通じてレスポンスをApatchへ返却し、最終的にブラウザに表示。
3. データベースアクセス
- リクエスト例: 商品リストを取得するAPI(
/api/products
)。 - データベースへのアクセスはSpring JPAが自動的に処理。
気を付けるポイント
-
AJP設定時の注意
- AJPポート(8009)のセキュリティ強化(ファイアウォール設定やIP制限)。
- ポート番号を変更する場合、ApatchとTomcatの両方で統一が必要。
-
Tomcatの設定ミス
server.xml
でAJPコネクタが有効になっているか確認。- Spring Bootアプリケーションが正しいパスでデプロイされているか確認。
-
Spring Bootアプリケーション
- データベース接続情報(URL、ユーザー名、パスワード)の誤りに注意。
- 必要な依存関係(例:
spring-boot-starter-data-jpa
)が含まれているか確認。
用語集
-
AJP (Apache JServ Protocol)
- ApatchとTomcat間で効率的にデータをやり取りするプロトコル。
- [AJP詳細解説(公式ドキュメント)](https://tomcat.apache.org/connectors-doc/ajp.html)
-
Spring Boot
- Javaで効率的にアプリケーションを構築するためのフレームワーク。
- [Spring Boot公式ガイド](https://spring.io/projects/spring-boot)
-
Tomcat
- Java ServletやJSPを動作させるアプリケーションサーバー。
- [Tomcat公式サイト](https://tomcat.apache.org/)
-
Hibernate
- Javaのデータベース操作を簡素化するORMツール。
- [Hibernate公式ドキュメント](https://hibernate.org/)
小学生にもわかる動作フロー
-
Apatchくん: 玄関でお客さん(ブラウザのリクエスト)を迎えるお兄さん。
- 「静的ファイル(写真や文章)」ならその場で渡してくれる。
- 「難しい注文(APIリクエスト)」は、奥の部屋のTomcatくんに頼む。
-
Tomcatくん: 奥の部屋でいろんな作業をする職人さん。
- Apatchくんから依頼を受けて、必要な作業をしてくれる。
- 例えば、「このお客さんのデータが知りたい」と言われたら、メモを見たり、さらに奥のOracle博士に聞いたりする。
-
Oracle博士: 奥の奥にいる物知り博士。
- たくさんの情報(データベース)を持っていて、Tomcatくんが「これ教えて!」とお願いすると、すぐに教えてくれる。
-
お客さんへのお返事:
- Oracle博士が教えた情報をTomcatくんがまとめて、Apatchくんに渡す。
- Apatchくんがお客さんに「どうぞ!」と返事をする。
これで、お客さんは必要なものを手に入れることができるよ!