【Web】Apache、Tomcatについて

Linux

 Apache や Tomcat などのサーバーをよく使っているのですが、まだ両者の関係などがよくわからない方が多いです。ほとんどの場合、Tomcat を使うと必ず Apache が出てきて、いつも戸惑います。

Apache(Apache HTTP Server)とは

 Apacheは C 言語で実装され、Webサーバとして使用されます。シンプルで高速で安定したパフォーマンスという利点があります。主な特徴は次のとおりです。

Webサーバとは、ブラウザからのHTTPリクエストに対して、HTMLファイルなどをレスポンスとして返してくれるサーバのこと。


 a. 主に静的リソース(html)の解析に使用されます。
 b. CGI、サーブレット/JSP、PHP、ASPなどの動的ページをサポートしない。
  ※PHPなどはモジュールの追加でApacheだけでも動くものはあります。
 c. Tomcatなどのと連携して動くのは多いです。

Tomcat(Apache Tomcat)とは

 Tomcat は Java で開発された JSP サーバー(Java Servletを動かす時に使うソフトでWebコンテナのこと)であり、JavaEE Servlet 仕様に準拠しています。アプリサーバとして利用されます。主な特徴は次のとおりです。

 a.JSPとJavaを解析できます。
 b.JVMの上に動作します。
 c.Webサーバとして動作できますが、静的リソースの解析はApacheより劣ります。

ApacheとTomcatの連携

 Apacheはプロキシのようにリクエストとレスポンスを転送し、ブラウザとTomcatの間に位置します。ApacheとTomcatの間の通信はAJPプロトコルを使用します。Apache httpd で AJP を利用するためには mod_proxy_ajp というモジュールをインストールして利用します。

Apache側の設定

 mod_proxy_ajp と mod_proxy読み込まれるようにします。CentOS、RHEL系OSなら、「/etc/httpd/conf.modules.d/00-proxy.conf」に以下の2行を追加(なければ)します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

 次にどんなパスにアクセスされた場合に Tomcat と連携するのかを設定してあげる必要があります。 「/etc/httpd/conf.modules.d/00-proxy.conf」に(なければ新規作成) Tomcat と連携したいパスと Tomcat のサーバーとパスを指定します。例えば、Apache httpd で受け付けた全てのリクエストを Tomcat で処理したい場合は次のようになります。 (※httpd と Tomcat が同一ホストにインストールする場合)

ProxyPass / ajp://localhost:8009/

 /home ディレクトリへのアクセスを Tomcat 上の /home と連携したい場合は次のようになります。

ProxyPass /home/ ajp://localhost:8009/home/

 設定が完了したら Apache httpd を再起動(rhelの場合:systemctl restart httpd)します。

Tomcat側の設定

 Tomcat はデフォルトで8080番ポート(HTTP)と8009番ポート(AJP)での通信を受け付けています。 もしインターネットからの全てのリクエストを Apache httpd 経由してTomcatに任せば、8080番ポートの待受けが不要になります。 その場合 server.xml ($CATALINA_HOME/conf/)の行を削除すれば良いです。

...
<!--<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...

コメント

タイトルとURLをコピーしました