Apache2.2 と Tomcat の連携を行う。
URL で Tomcat のポート番号を指定して直接アクセスするのではなく、あくまでクライアントからは Web サーバ(Apache)にアクセスし、Apache がこっそり裏でアプリケーションサーバ(Tomcat)にクライアントからのリクエストを中継し、返ってきた内容をさも自分が処理したかのようにクライアントに返す・・・という形。
ちなみに、Apache 2.2 は yum インストールしたものである。
# rpm -qa|grep httphttpd-tools-2.2.15-31.el6.centos.x86_64httpd-2.2.15-31.el6.centos.x86_64
まず、Tomcat の設定をする。
・直接クライアントがポート番号を指定してアクセスしてきても無視する。・Apache からのアクセスは許す。
# cd /usr/local/tomcat/conf# cp server.xml server.xml_20160226# vi server.xml
修正箇所は下記の 2箇所。
1.HTTP/1.1 プロトコルを受けるポートの指定のところをコメントにする。<!--<Connector port="9880" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />-->2.AJP からリダイレクトされてくるポートの指定を 9880 に修正する。※変えなくてもいいんだけど、まあ、少しだけでも安全になるように(笑)<Connector port="9880" protocol="AJP/1.3" redirectPort="8443" />
で、Apache の方の設定。
ソースから入れれば、/usr/local/apache2/conf とその下の extra ディレクトリに必要な設定ファイル(httpd.conf と httpd-proxy.conf)が存在していると思うが、yum で入れるとなんでもかんでも httpd.conf に書く古いやり方がディフォルトになってるようで・・・
/etc/httpd/conf/httpd.conf に VirtualHost の設定なんかも書かれているし、気持ち悪いんだけど、今回は、まあ、その書き方に従って、Proxy 設定も httpd.conf に追加しちゃう(^^;
ちなみに、関係するモジュールを読み込むための、
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.so
この設定は元々有効になってた。
(テスト用サーバなので、予め全部有効にしてたんかね・・・???もう記憶にない(^^;)
# find / -name "mod_proxy_ajp.so" -print/usr/lib64/httpd/modules/mod_proxy_ajp.so
モジュールもちゃんと存在してるね。
# cp httpd.conf httpd.conf_20160226# vi httpd.conf# diff httpd.conf httpd.conf_20160226956,959d955< <Location /s/>< ProxyPass ajp://localhost:9880/< </Location><
Apache を再起動
# service httpd restartStopping httpd: [ OK ]Starting httpd: [ OK ]
Tomcat も再起動。
# service tomcat restartStopping tomcat: [ OK ]Starting tomcat: [ OK ]
これで、今まで
http://www.exsample.com:9876/test.jsp
にアクセスしていたものが、
http://www.exsample.com/s/test.jsp
でアクセスできるようになる。
一番最初に書いたように、一旦、80番ポートで待つ Apache にアクセスし、Apache が 9876番ポートで待つ Tomcat にアクセスし、返ってきた内容をクライアントのブラウザに返す・・・ということだね。
コメントする