AJP(Apache JServ Protocol)

##AJPとは
Apache httpd と Apache Tomcat を連携させるためのプロトコル

##AJPを使う目的
>インターネットからのリクエストを httpd で受付け、Java での動的な処理が必要なページの処理は裏方となる Tomcat に実行させたいためです。 <br>この時、Apache httpd は<b>プロキシの役目</b>を担っていることを意識することが、本稿を読み進めて行く上で重要です。<br>https://weblabo.oscasierra.net/tomcat-mod-proxy-ajp/

##Apache のモジュールを有効にする
>AJP13 プロトコルを扱えるようにするには <b>mod_proxy</b> と <b>mod_proxy_ajp</b> をサーバに組み込む必要があります。<br>【公式】https://httpd.apache.org/docs/2.4/ja/mod/mod_proxy_ajp.html

```
sudo a2enmod proxy
sudo a2enmod proxy_ajp
```
https://web.just4fun.biz/?Apache/a2enmod%E3%81%A8a2dismod%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%8B%95%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

```:結果
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側設定変更

```:/var/lib/tomcat9/conf/server.xml

<!--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に設定する必要があります。<br>【公式】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アドレス）でリッスンします。<br>【公式】https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html||
|ループバックアドレス|ループバックアドレスはネットワーク上において自分自身を表す仮想的なアドレスであり、IPv4においては「127.0.0.1」、<b>IPv6においては「::1」</b>（0:0:0:0:0:0:0:1）が使われる。また、ホスト名としては慣用的に「localhost」が用いられる。IPv6ではループバックアドレスは「::1」しか用いることができないと定義されているが、IPv4の「127.0.0.1」は慣習的に決められたもので、正式なものではない。このため、OSによってはこれ以外のIPアドレスをループバックアドレスとして使用できる場合もある（が、通常は別のアドレスは使わない）。<br>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 の設定変更
```:/etc/apache2/apache2.conf
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ではアクセスできなくなっている。<br>・ルートでAJP通信を行うように設定した|

https://qiita.com/ekzemplaro/items/ae5e3e3b17d206df6f0a