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" />
...
コメント