Tomcat9.0.37(CentOS8.2 2004)

2020/8/7


概要

Apache Tomcat 9.0.31以降、server.xmlとproxy_ajp.confの記述に変更があったらしい。
Tomcat 9.0.30のつもりで設定すると

インストール

おおまかな流れはTomcat 9.0.30と同じであるので、詳細は省略する。
最新版Tomcat(Tomcat9.0.37)をhttp://tomcat.apache.org/からを入手し、いろいろ作業をすることとした。
作業手順は、前回同様
  1. httpdをインストール
    いろいろ設定し、httpdの動作を確認
  2. tomcatを使うために必要な道具をインストール
    java実行環境の動作を確認
  3. ユーザtomcatを作成
  4. tomcatをダウンロード
    tomcatの動作をテストページで確認
  5. コンテナを記述
    myappの動作を確認
  6. コンテナを記述
    myappの動作を確認
  7. OS起動時にTomcatの扱いを記述
になる。

Apache httpd インストール

Apache httpdをインストールする。
dnf -y install httpd
dnf -y install pwgen;#後でパスワード生成時に使用

/etc/httpd/conf/httpd.confを修正する。
修正前修正後
ServerAdmin root@localhost連絡先に修正
ServerName ...ServerName www.takahashi.lab:80
AllowOverride ...
<Directory "/var/www/html">中
AllowOverride All
ScriptAlias ...CGIを使用しないのでコメントアウト
#    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
< Directory ...上記修正に合わせてコメントアウト
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>
 
# 最終行に追記
# サーバーの応答ヘッダ
ServerTokens Prod
# キープアライブオン
KeepAlive On
各ユーザのディレクトリを有効にする。
/etc/httpd/conf.d/userdir.confを編集する。
#    UserDir disabled
    UserDir public_html

Apache 動作確認(1)

テストページ(/var/www/html/index.html)を作成し、Apacheを起動する。
firewall-cmd --list-all ;#httpがないことを確認
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
systemctl start httpd
systemctl enable httpd

Apache Tomcat9.0.37 インストール

Tomcatを使うにあたり、java実行環境(JRE)が必要となる。
dnf install -y java-11-openjdk java-11-openjdk-devel java-11-openjdk-headless java-11-openjdk-javadoc java-11-openjdk-jmods
java -version
javac -version
Tomcat9.0.37をダウンロードする。
mkdir -p ~/Downloads;cd ~/Downloads
wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz

tar xvzf apache-tomcat-9.0.37.tar.gz
mv apache-tomcat-9.0.37 /usr/tomcat
mkdir -p /usr/tomcat/webapps/ROOT/WEB-INF/classes
useradd -M -d /usr/tomcat tomcat
chown -R tomcat:tomcat /usr/tomcat/

#Tomcatが動的に生成するファイルのパーミッションを750にする。
su - tomcat
echo '#!/bin/sh' > /usr/tomcat/bin/setenv.sh 
echo "UMASK=0022" >> /usr/tomcat/bin/setenv.sh 
chmod 750 /usr/tomcat/bin/setenv.sh ;chown tomcat:tomcat /usr/tomcat/bin/setenv.sh
/usr/tomcat/bin/startup.sh;#systemctlなしでtomcatを起動/停止できることを確認,あわせてlogをつくる
sleep 10;
/usr/tomcat/bin/shutdown.sh;#
chown -R tomcat:tomcat /usr/tomcat/;#logの所有者をtomcatに変更
systemctl用にtomcat.serviceをつくる。
起動セッションにtomcatを追加するためにこれが必要になる。
#cat /usr/lib/systemd/system/tomcat.service
#tomcat.service
# 新規作成
[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/tomcat/bin/startup.sh
ExecStop=/usr/tomcat/bin/shutdown.sh
RemainAfterExit=yes
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
systemctlで動作を確認する。自動起動するようにenableをにつける。
getenforce;# SELinuxの状態を確認 Enforcingなら startup.shは拒否される
setenforce 0;# SELinuxの状態をPermissiveに変更
systemctl start tomcat;systemctl status tomcat;
systemctl enable tomcat;#起動セッションにtomcatを追加
systemctl stop tomcat;systemctl status tomcat;
systemctl start tomcat;

Tomcat9.0.37 動作確認(1)

ポート8080はfirewall-cmdで許可していないので、アクセスはlocalhostに限定される。
webブラウザでhttp://localhost:8080/にアクセスし、Tomcatの動作を確認する。
tomcat

Tomcat9.0.37 動作確認(2)

tomcat top pageが開いたので、JSPを1つつくる。
cat /usr/tomcat/webapps/ROOT/hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<%
  String msg = "Hello, JSP !!!" ;
%>
<body>
  <h1><%= msg %></h1>
</body>
</html>
webブラウザでhttp://localhost:8080/hello.jspにアクセスし、動作を確認する。
hello.jsp

Tomcat9.0.37 動作確認(3)

ポート8080を使わず、webserverの一部としてtomcatを動かす。
tomcat top pag(index.jsp)とhello.jspは別々なURIにする。
パスワードは長い文字列なんでもよいが、それらしくpwgenでパスワードをつくってみた。
#パスワード生成
pwgen 16 1
#proxy_ajp.confをつくる
vi /etc/httpd/conf.d/proxy_ajp.conf
vi /usr/tomcat/conf/server.xml
systemctl restart tomcat httpd


/etc/httpd/conf.d/proxy_ajp.confを修正
secret=にpwgenで生成したパスワードをつける。パスワードにダブルクォート"は不要
<Location /tomcat/>
  ProxyPass ajp://localhost:8009/ secret=Vahch5aih9aeshae
</Location>

<Location /hello/>
  ProxyPass ajp://localhost:8009/hello.jsp secret=Vahch5aih9aeshae
</Location>


/usr/tomcat/conf/server.xmlを修正
パスワードにダブルクォート"が必要
修正前修正後
#AJP 1.3 Connectorがコメントアウトされている <!-- から -->
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->
#secret=にpwgenで生成したパスワードをつける。パスワードにダブルクォート"が必要
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    
    <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="8009"
               redirectPort="8443"
               secret="Vahch5aih9aeshae" />
    
webブラウザで http://localhost/以下にアクセスし、それぞれの動作を確認する。
http://webserver.takahashi.lab/tomcat/
tomcat8

http://webserver.takahashi.lab/hello/
hello