AJPとは
Apache httpd と Apache Tomcat を連携させるためのプロトコル
AJPを使う目的
インターネットからのリクエストを httpd で受付け、Java での動的な処理が必要なページの処理は裏方となる Tomcat に実行させたいためです。
この時、Apache httpd はプロキシの役目を担っていることを意識することが、本稿を読み進めて行く上で重要です。
https://weblabo.oscasierra.net/tomcat-mod-proxy-ajp/
Apache のモジュールを有効にする
AJP13 プロトコルを扱えるようにするには mod_proxy と mod_proxy_ajp をサーバに組み込む必要があります。
【公式】https://httpd.apache.org/docs/2.4/ja/mod/mod_proxy_ajp.html
sudo a2enmod proxy
sudo a2enmod proxy_ajp
hoge@ubuntuserver:~$ sudo a2enmod proxy
Enabling module proxy.
To activate the new configuration, you need to run:
systemctl restart apache2
hoge@ubuntuserver:~$ sudo a2enmod proxy_ajp
Considering dependency proxy for proxy_ajp:
Module proxy already enabled
Enabling module proxy_ajp.
To activate the new configuration, you need to run:
systemctl restart apache2
Tomcat側設定変更
<!--8080ポートでのHTTP通信をコメントアウト
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
(省略)
<Connector protocol="AJP/1.3"
port="8009"
secretRequired="false"
redirectPort="8443" />
(省略)
参考:https://weblabo.oscasierra.net/tomcat-mod-proxy-ajp/
|項目|解説|
|----|----|----|
|secretRequired="false"|この属性がtrueの場合、AJPコネクタは、シークレット属性がnull以外、ゼロ以外の長さの値で設定されている場合にのみ起動します。この属性は、AJPコネクタを起動するためにシークレット属性を指定する必要があるかどうかのみを制御します。労働者が秘密を提供する必要があるかどうかは制御しません。デフォルト値はtrueです。この属性は、コネクタが信頼できるネットワークで使用されている場合にのみfalseに設定する必要があります。
【公式】https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html||
|address|複数のIPアドレスを持つサーバーの場合、この属性は、指定されたポートでリッスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはループバックアドレスをリッスンします。システムプロパティを使用してJVMが別の方法で構成されていない限り、Javaベースのコネクタ(NIO、NIO2)は、0.0.0.0または::のいずれかで構成されている場合、IPv4アドレスとIPv6アドレスの両方でリッスンします。 APR /ネイティブコネクタは、0.0.0.0で構成されている場合にのみIPv4アドレスでリッスンし、::で構成されている場合はIPv6アドレス(およびオプションでipv6v6onlyの設定に応じてIPv4アドレス)でリッスンします。
【公式】https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html||
|ループバックアドレス|ループバックアドレスはネットワーク上において自分自身を表す仮想的なアドレスであり、IPv4においては「127.0.0.1」、IPv6においては「::1」(0:0:0:0:0:0:0:1)が使われる。また、ホスト名としては慣用的に「localhost」が用いられる。IPv6ではループバックアドレスは「::1」しか用いることができないと定義されているが、IPv4の「127.0.0.1」は慣習的に決められたもので、正式なものではない。このため、OSによってはこれ以外のIPアドレスをループバックアドレスとして使用できる場合もある(が、通常は別のアドレスは使わない)。
https://e-words.jp/w/%E3%83%AB%E3%83%BC%E3%83%97%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9.html||
http://blog.onodera.asia/2020/04/apachetomcatsecretrequiredfalse.html
https://qiita.com/ekzemplaro/items/ae5e3e3b17d206df6f0a
Tomcat 再起動
sudo systemctl restart tomcat9
Apache2 の設定変更
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ポイント | 説明 |
---|---|
上記をapache2.confに記述して上書きすれば良い。 | |
「/」ルート | ルート部分がlocalhost:8009となる |
Apache2 の再起動
sudo systemctl restart apache2
ブラウザーで、下記にアクセス。
AJP前後 | URL例 | 説明 |
---|---|---|
設定前 | http://sample_domain:8080/app_name/ | 8080でHTTP通信 |
設定後 | http://sample_domain/app_name/ | ・8080をコメントアウトしたので、上のURLではアクセスできなくなっている。 ・ルートでAJP通信を行うように設定した |