将Apache和Tomcat进行集成

首先

作为安装Tomcat并自动启动的设置的延续,下面总结了在Apache端接收到的HTTP请求转发到Tomcat的设置。

使用环境

    • OS

CentOS 7.7(1908)

Java(Amazon Corretto)

Java 1.8.0_242

Apache

Apache-2.4.6

Tomcat

Tomcat-9.0.30

安装Apache

    yumコマンドでインストールした後、バージョン情報を表示して正しくインストールされたことを確認しておきます。
[root@akagi ~]# yum install -y httpd
[root@akagi ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18

设置Apache的自动启动配置。

    systemctl enable…で自動起動の設定をして、その後に自動起動設定を確認しておきます。
[root@akagi ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@akagi ~]# systemctl list-unit-files -t service | grep httpd
httpd.service                                 enabled 

编辑设置文件

    ここではhttpd.confを編集して、ApacheからTomcatへリバースプロキシでリクエストを投げる設定をします。

确认/etc/httpd/conf.modules.d/00-proxy.conf文件

/etc/httpd/conf.modules.d/00-proxy.confにはリバースプロキシに使われるモジュールの設定が記載されています。

mod_proxy.soとmod_proxy_ajp.soが記載されており、コメント行になっていないことを確認します。

行頭が#だとコメント行になります。

mod_proxy_ajpを使うと、HTTPよりも効率の良いAJPというプロトコルを使ってTomcatと通信することができます。

かなり前はmod_jkやmod_jk2というモジュールを使っていたと思うのですが、いつの間にか使用するモジュールが変わっていました…

# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
...
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
...

httpd.conf的备份

    httpd.confを編集する前に、オリジナルの状態でhttpd.confをバックアップしておきます。
[root@akagi ~]# cd /etc/httpd/conf/
[root@akagi conf]# cp -a httpd.conf httpd.conf.org

反向代理服务器的设置

    • ProxyPassおよびProxyPassReverseを以下の要領で設定します。

ProxyPass {リクエストパス} ajp://localhost:8009/{Javaアプリのコンテキスト名}
ProxyPassReverse {リクエストパス} ajp://localhost:8009/{Javaアプリのコンテキスト名}

ProxyPassとProxyPassReverseはいずれも「リクエストパスに来たリクエストを、アプリケーションサーバー(※ここではTomcat)に転送する」という役割を持ちますが、リダイレクトを使う場合はProxyPassReverseを設定しておく必要があります。

以下の例では、リクエストがhttp://{サーバーのIP}/tomcat9/にマッチする場合、自ホスト(localhost)の8009番ポートのコンテキスト名/(※Tomcatの管理画面)に転送する設定となっています。
参考URL:mod_proxy再入門 – ProxyPassとProxyPassReverse

# 以下をファイルの末尾に追記
ProxyPass /tomcat9/ ajp://localhost:8009/
ProxyPassReverse /tomcat9/ ajp://localhost:8009/
    • 例えば、Tomcat上で動作しているコンテキスト名がtestのアプリに対してリバースプロキシの設定をする場合は、以下のような設定になります。

tomcat9としている箇所は、任意の文字列に置き換え可能です。

# 以下をファイルの末尾に追記
ProxyPass /tomcat9/ ajp://localhost:8009/test/
ProxyPassReverse /tomcat9/ ajp://localhost:8009/test/

反映设置

    • CentOS5系およびCentOS6系ではservice httpd gracefulを実行して、Apacheを強制的に再起動させるのではなく、設定値の反映だけをさせてきましたが、CentOS7系のApacheだとgracefulが使えません。

こちらの記事によると、reloadを使ってsystemctl reload httpdを実行すれば、従来のgracefulと同じ効果が得られるそうです。

[root@akagi ~]# systemctl reload httpd

确认动作

    最後にhttp://{サーバーのIP}/tomcat9/にアクセスして、Tomcatの管理画面が見られることを確認します。
image.png

相关工作

    • Tomcatの8080番ポートを塞ぐ

 

    ApacheでIPアドレスによるアクセスを禁止する
广告
将在 10 秒后关闭
bannerAds