「Tomcat」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「Tips and tricks」を「ヒントとテクニック」に置換)
 
(他の1人の利用者による、間の1版が非表示)
4行目: 4行目:
 
Tomcat は Apache ソフトウェア財団によって開発されているオープンソースの Java [[wikipedia:Java_Servlet#Servlet_containers|Servlet コンテナ]]です。
 
Tomcat は Apache ソフトウェア財団によって開発されているオープンソースの Java [[wikipedia:Java_Servlet#Servlet_containers|Servlet コンテナ]]です。
   
{{Note|Tomcat には現在3つの安定ブランチが存在します: [http://tomcat.apache.org/download-60.cgi 6], [http://tomcat.apache.org/download-70.cgi 7], [https://tomcat.apache.org/download-80.cgi 8]。新しいバージョンしか動作しないということはなく、[http://tomcat.apache.org/whichversion.html#Apache_Tomcat_Versions 各ブランチはそれぞれ "Servlet" と "JSP" の Java 標準仕様を実装] しています。Arch Linux では全てのバージョンが公式にサポートされています: {{Pkg|tomcat6}}, {{Pkg|tomcat7}}, {{Pkg|tomcat8}}。使用したいウェブアプリケーションの要件にあわせて必要なバージョンは変わります。Tomcat を試してみたいだけであまり時間を割きたくない場合、tomcat7 を試してみると良いでしょう。この wiki ページでは tomcat7 について記述していますが、大体の内容は tomcat6 や tomcat8 でも同じです。}}
+
{{Note|Tomcat には現在2つの安定ブランチが存在します: [http://tomcat.apache.org/download-70.cgi 7], [https://tomcat.apache.org/download-80.cgi 8]。新しいバージョンしか動作しないということはなく、[http://tomcat.apache.org/whichversion.html#Apache_Tomcat_Versions 各ブランチはそれぞれ "Servlet" と "JSP" の Java 標準仕様を実装] しています。Arch Linux では全てのバージョンが公式にサポートされています: {{Pkg|tomcat7}}, {{Pkg|tomcat8}}。使用したいウェブアプリケーションの要件にあわせて必要なバージョンは変わります。Tomcat を試してみたいだけであまり時間を割きたくない場合、tomcat7 を試してみると良いでしょう。この wiki ページでは tomcat7 について記述していますが、大体の内容は tomcat6 や tomcat8 でも同じです。}}
   
 
== インストール ==
 
== インストール ==
{{Pkg|tomcat6}}, {{Pkg|tomcat7}}, {{Pkg|tomcat8}} のどかをインストールしてください。
+
{{Pkg|tomcat7}} または {{Pkg|tomcat8}} のどちらかをインストールしてください。
   
 
Tomcat を本番環境にデプロイするときは、{{Pkg|tomcat-native}} をインストールすることも考慮してください。Tomcat のネイティブライブラリは Apache Portable Runtime (APR) ライブラリのネットワーク接続 (ソケット) と RNG 実装を使用するようにサーバーを設定します。ネイティブの32・64ビットのコードを使うことでパフォーマンスが改善されるので、速度が重要な本番環境でしばしば使われています。デフォルトの Tomcat に設定を加える必要はありません。詳しくは [http://tomcat.apache.org/native-doc/ 公式の Tomcat ドキュメント] を参照。
 
Tomcat を本番環境にデプロイするときは、{{Pkg|tomcat-native}} をインストールすることも考慮してください。Tomcat のネイティブライブラリは Apache Portable Runtime (APR) ライブラリのネットワーク接続 (ソケット) と RNG 実装を使用するようにサーバーを設定します。ネイティブの32・64ビットのコードを使うことでパフォーマンスが改善されるので、速度が重要な本番環境でしばしば使われています。デフォルトの Tomcat に設定を加える必要はありません。詳しくは [http://tomcat.apache.org/native-doc/ 公式の Tomcat ドキュメント] を参照。
24行目: 24行目:
 
|{{ic|/etc/tomcat7}} || 設定ファイル。例: {{ic|tomcat-users.xml}} (管理ツールを使用するユーザーやロールを定義), {{ic|server.xml}} (Tomcat のメイン設定ファイル), {{ic|catalina.policy}} (セキュリティポリシーの設定ファイル)。
 
|{{ic|/etc/tomcat7}} || 設定ファイル。例: {{ic|tomcat-users.xml}} (管理ツールを使用するユーザーやロールを定義), {{ic|server.xml}} (Tomcat のメイン設定ファイル), {{ic|catalina.policy}} (セキュリティポリシーの設定ファイル)。
 
|-
 
|-
||{{ic|/var/log/tomcat7}} || ログファイル。{{Ic|systemd}} からは処理されません ([[#ログ]]を参照)。
+
|{{ic|/var/log/tomcat7}} || ログファイル。{{Ic|systemd}} からは処理されません ([[#ログ]]を参照)。
 
|-
 
|-
 
|{{ic|/var/lib/tomcat7/webapps}} || Tomcat がウェブアプリケーションをデプロイするフォルダ。
 
|{{ic|/var/lib/tomcat7/webapps}} || Tomcat がウェブアプリケーションをデプロイするフォルダ。
58行目: 58行目:
 
ロールについては [http://blog.techstacks.com/2010/07/new-manager-roles-in-tomcat-7-are-wonderful.html このブロク記事] に詳しい説明があります。
 
ロールについては [http://blog.techstacks.com/2010/07/new-manager-roles-in-tomcat-7-are-wonderful.html このブロク記事] に詳しい説明があります。
   
IDE と統合するために設定ファイルの読み込み権限を設定するには、tomcat グループ (使用しているバージョンによって tomcat6, tomcat7, tomcat8 となります) にユーザーを追加してください:
+
IDE と統合するために設定ファイルの読み込み権限を設定するには、tomcat グループ (使用しているバージョンによって tomcat7 または tomcat8 となります) にユーザーを追加してください:
gpasswd -a <user> tomcat<number>
+
# gpasswd -a <user> tomcat<number>
   
 
== Tomcat の起動・停止 ==
 
== Tomcat の起動・停止 ==
   
  +
{{ic|tomcat7}} (または {{ic|tomcat8}}) サービスを[[起動]]してください。
次のコマンドで Tomcat を起動できます:
 
# systemctl start tomcat7
 
   
 
Tomcat を起動したら、次のページを開いて動作していることを確認します: [http://localhost:8080 http://localhost:8080]。素敵な Tomcat のローカルホームページが表示されたら、Servlet コンテナが問題なく立ち上がっています。起動スクリプトが上手く動作しなかった場合、ブラウザには Java のエラーだけが表示されます。[[Systemd#Journal|systemd の journalctl]] を使って起動ログを確認してください。Tomcat のログに書かれている問題の答えは全て Google にあります。
 
Tomcat を起動したら、次のページを開いて動作していることを確認します: [http://localhost:8080 http://localhost:8080]。素敵な Tomcat のローカルホームページが表示されたら、Servlet コンテナが問題なく立ち上がっています。起動スクリプトが上手く動作しなかった場合、ブラウザには Java のエラーだけが表示されます。[[Systemd#Journal|systemd の journalctl]] を使って起動ログを確認してください。Tomcat のログに書かれている問題の答えは全て Google にあります。
110行目: 109行目:
   
 
== ログ ==
 
== ログ ==
公式の Arch Linux パッケージの Tomcat は [[Systemd#Journal|systemd の journalctl]] で起動ログを記録します。'{{ic|/var/log/tomcat7/catalina.err}} や {{ic|/var/log/tomcat7/catalina.out}} ファイルは使われません。{{ic|/etc/tomcat7/server.xml}} で {{Ic|Valve}} と定義されている、アクセスログやビジネスログなどのログはデフォルトのまま {{ic|/var/log/tomcat7/}} に記録されます。
+
公式の Arch Linux パッケージの Tomcat は [[Systemd#Journal|systemd の journalctl]] で起動ログを記録します。{{ic|/var/log/tomcat7/catalina.err}} や {{ic|/var/log/tomcat7/catalina.out}} ファイルは使われません。{{ic|/etc/tomcat7/server.xml}} で {{Ic|Valve}} と定義されている、アクセスログやビジネスログなどのログはデフォルトのまま {{ic|/var/log/tomcat7/}} に記録されます。
   
 
上流のようにログを保存したい場合、systemd ファイル {{ic|/lib/systemd/system/tomcat7.service}} を {{ic|/etc/systemd/system/tomcat7.service}} にコピーして、ログファイルの絶対パスを指定する {{ic|SYSLOG}} を変更してください。
 
上流のようにログを保存したい場合、systemd ファイル {{ic|/lib/systemd/system/tomcat7.service}} を {{ic|/etc/systemd/system/tomcat7.service}} にコピーして、ログファイルの絶対パスを指定する {{ic|SYSLOG}} を変更してください。
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
 
基本的な設定はバーチャルホストのウェブアプリケーションで行うことができます: http://localhost:8080/host-manager/html 。{{ic|tomcat-users.xml}} で設定したユーザー名とパスワードを使ってください。他のオプションについては {{ic|/etc/tomcat7}} の設定ファイル (特に {{ic|server.xml}}) で変更できます。詳しくは [http://tomcat.apache.org/tomcat-7.0-doc/index.html Tomcat 7 の公式ドキュメント] を参照。
 
基本的な設定はバーチャルホストのウェブアプリケーションで行うことができます: http://localhost:8080/host-manager/html 。{{ic|tomcat-users.xml}} で設定したユーザー名とパスワードを使ってください。他のオプションについては {{ic|/etc/tomcat7}} の設定ファイル (特に {{ic|server.xml}}) で変更できます。詳しくは [http://tomcat.apache.org/tomcat-7.0-doc/index.html Tomcat 7 の公式ドキュメント] を参照。
   
 
=== 前のバージョンの Tomcat からの移行 ===
 
=== 前のバージョンの Tomcat からの移行 ===
上に書いてあるように、Tomcat 7 によって Tomcat 6 が使えなくなることはありません。3つとも Servlet/JSP 標準の実装です。まず、あなたが使用したいアプリケーションがどのバージョンの Servlet/JSP を必要するのかによって Tomcat の [http://tomcat.apache.org/whichversion.html#Apache_Tomcat_Versions 使用するバージョン] を選択する必要があります。バージョンの移行が必要なときは、公式ウェブサイトに [http://tomcat.apache.org/migration.html 移行を行う手順] が書かれています。
+
上に書いてあるように、Tomcat 8 によって Tomcat 7 が使えなくなることはありません。2つとも Servlet/JSP 標準の実装です。まず、あなたが使用したいアプリケーションがどのバージョンの Servlet/JSP を必要するのかによって Tomcat の [http://tomcat.apache.org/whichversion.html#Apache_Tomcat_Versions 使用するバージョン] を選択する必要があります。バージョンの移行が必要なときは、公式ウェブサイトに [http://tomcat.apache.org/migration.html 移行を行う手順] が書かれています。
   
 
=== 別の JRE/JDK で Tomcat を使用する ===
 
=== 別の JRE/JDK で Tomcat を使用する ===
135行目: 134行目:
   
 
=== セキュリティ設定 ===
 
=== セキュリティ設定 ===
This page gives the bare minimum to get your first web application to run on Tomcat. It is not intended to be the definitive guide to administering Tomcat (it is a job of its own). The official Tomcat website will provide all necessary official matter. One could also refer to [http://oreilly.com/java/archive/tomcat-tips.html this O'Reilly page] and this [http://www.unidata.ucar.edu/projects/THREDDS/tech/reference/TomcatSecurity.html last one].
+
このページはあくまで Tomcat の上でウェブアプリケーションを動かすために必要な最低限の設定について説明しています。Tomcat の管理に関する総合的なガイドではありません。必要な情報は Tomcat の公式サイトで収集できます。[http://oreilly.com/java/archive/tomcat-tips.html O'Reilly のページ] [http://www.unidata.ucar.edu/projects/THREDDS/tech/reference/TomcatSecurity.html 大気研究大学連合のページ] も参照すると良いでしょう。セキュリティのヒント:
Still, here are some security tips to get you started:
 
   
  +
* Tomcat 環境は常にセキュリティフィックスが適用された最新状態にしてください。
* Keep your Tomcat installation up to date to get the latest fixes to security issues
 
  +
* 不必要な {{Ic|examples}}, {{Ic|docs}}, {{Ic|ROOT}} ({{Ic|manager}} ウェブアプリの "_") などのデフォルトアプリケーションは削除してください。セキュリティホールになってしまう可能性があります。{{Ic|manager}} を使ってください。
* Remove unwanted default applications such as {{Ic|examples}}, {{Ic|docs}}, default home page {{Ic|ROOT}} ("_" in the {{Ic|manager}} webapp). This prevents potential security holes to be exploited. Use the {{Ic|manager}} for that.
 
   
  +
セキュリティを高めたい場合、host-manager と manager ウェブアプリケーションも削除します。ただし、後者はウェブアプリケーションのデプロイに役立ちます。
For more security you could even remove the host-manager and manager web applications. Keep in mind that the later is useful to deploy web applications.
 
   
* Disable the WAR auto-deploy option. This would prevent someone who gained restricted access to the server to copy a WAR into the {{ic|/usr/share/java/webapps}} directory to get it running. Edit {{ic|server.xml}} and set the {{Ic|autoDeploy}} to {{Ic|false}}:
+
* WAR の自動デプロイオプションは無効化してください。{{ic|/usr/share/java/webapps}} ディレクトリに WAR ファイルをコピーする権限が盗まれても勝手に実行されなくなります。{{ic|server.xml}} を編集して {{Ic|autoDeploy}} {{Ic|false}} に設定:
 
{{hc|/etc/tomcat7/server.xml|2=
 
{{hc|/etc/tomcat7/server.xml|2=
 
...
 
...
150行目: 148行目:
 
...
 
...
 
}}
 
}}
* Anonymize Tomcat's default error page to prevent potential attackers to retrieve Tomcat's version. To see what Tomcat says by default, just visit an nonexistent page such as [http://localhost:8080/I_dont_exist http://localhost:8080/I_dont_exist]. You get a 404 error page with Tomcat's version at the bottom.
+
* Tomcat のデフォルトエラーページを変更することで Tomcat のバージョンの漏洩を防げます。デフォルトで Tomcat がどのような表示をするのか確認するには、[http://localhost:8080/I_dont_exist http://localhost:8080/I_dont_exist] など適当なページを開いてみてください。ページの末尾に Tomcat のバージョンが記載されていることが確認できます。
   
  +
変更するには、以下の JAR を編集してください ({{Ic|vim}} などのエディタは zip を直接編集できます):
To anonymize this, edit/open the following JAR (Editors like {{Ic|vim}} can edit zips directly)
 
 
/usr/share/tomcat7/lib/catalina.jar
 
/usr/share/tomcat7/lib/catalina.jar
  +
そして以下のファイルを編集します:
And edit the following file
 
 
{{hc|org/apache/catalina/util/ServerInfo.properties|2=
 
{{hc|org/apache/catalina/util/ServerInfo.properties|2=
 
...
 
...
163行目: 161行目:
 
}}
 
}}
   
  +
* {{ic|server.xml}} の使用していない {{Ic|connectors}} を無効化してください。
* Disable unused {{Ic|connectors}} in {{ic|server.xml}}
 
 
* Keep restricted access to {{ic|/etc/tomcat7/server.xml}}. Only {{Ic|tomcat}} user and/or {{Ic|root}} should be able to read and write this.
 
* Keep restricted access to {{ic|/etc/tomcat7/server.xml}}. Only {{Ic|tomcat}} user and/or {{Ic|root}} should be able to read and write this.
 
* Keep {{Ic|jsvc}} usage. Do not use upstream startup scripts unless particular reason as explained in the security note above.
 
* Keep {{Ic|jsvc}} usage. Do not use upstream startup scripts unless particular reason as explained in the security note above.
 
* Use strong different passwords for each user in {{Ic|tomcat-users.xml}}, give roles to users who really need them and even disable usernames/roles you do not use/need.
 
* Use strong different passwords for each user in {{Ic|tomcat-users.xml}}, give roles to users who really need them and even disable usernames/roles you do not use/need.
   
One can even crypt {{ic|tomcat-users.xml}} passwords using the following upstream script:
+
以下のようにスクリプトを使うことで {{ic|tomcat-users.xml}} のパスワードを暗号化できます:
 
/usr/share/tomcat7/bin/digest.sh -a SHA NEW_PASSWORD
 
/usr/share/tomcat7/bin/digest.sh -a SHA NEW_PASSWORD
  +
以下のように出力されます:
This will output something like:
 
 
NEW_PASSWORD:b7bbb48a5b7749f1f908eb3c0c021200c72738ce
 
NEW_PASSWORD:b7bbb48a5b7749f1f908eb3c0c021200c72738ce
Paste the hashed part in place of the clear password in {{ic|tomcat-users.xml}} and add the following to {{ic|server.xml}}:
+
ハッシュ化された部分を {{ic|tomcat-users.xml}} に貼り付けて平文のパスワードを置き換えてください。そして {{ic|server.xml}} に以下を追加:
 
{{hc|/etc/tomcat7/server.xml|2=
 
{{hc|/etc/tomcat7/server.xml|2=
 
<Host
 
<Host

2017年10月12日 (木) 23:16時点における最新版

Tomcat は Apache ソフトウェア財団によって開発されているオープンソースの Java Servlet コンテナです。

ノート: Tomcat には現在2つの安定ブランチが存在します: 7, 8。新しいバージョンしか動作しないということはなく、各ブランチはそれぞれ "Servlet" と "JSP" の Java 標準仕様を実装 しています。Arch Linux では全てのバージョンが公式にサポートされています: tomcat7, tomcat8。使用したいウェブアプリケーションの要件にあわせて必要なバージョンは変わります。Tomcat を試してみたいだけであまり時間を割きたくない場合、tomcat7 を試してみると良いでしょう。この wiki ページでは tomcat7 について記述していますが、大体の内容は tomcat6 や tomcat8 でも同じです。

インストール

tomcat7 または tomcat8 のどちらかをインストールしてください。

Tomcat を本番環境にデプロイするときは、tomcat-native をインストールすることも考慮してください。Tomcat のネイティブライブラリは Apache Portable Runtime (APR) ライブラリのネットワーク接続 (ソケット) と RNG 実装を使用するようにサーバーを設定します。ネイティブの32・64ビットのコードを使うことでパフォーマンスが改善されるので、速度が重要な本番環境でしばしば使われています。デフォルトの Tomcat に設定を加える必要はありません。詳しくは 公式の Tomcat ドキュメント を参照。

tomcat-native を使用すると catalina.err の以下の警告が消えます:

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path [...]

ファイルシステム階層

パス名 目的
/usr/share/tomcat7 スクリプトや他のディレクトリのリンクが存在する Tomcat のメインフォルダ。
/usr/share/java/tomcat7 Tomcat の Java ライブラリ (jar)。
/etc/tomcat7 設定ファイル。例: tomcat-users.xml (管理ツールを使用するユーザーやロールを定義), server.xml (Tomcat のメイン設定ファイル), catalina.policy (セキュリティポリシーの設定ファイル)。
/var/log/tomcat7 ログファイル。systemd からは処理されません (#ログを参照)。
/var/lib/tomcat7/webapps Tomcat がウェブアプリケーションをデプロイするフォルダ。
/var/tmp/tomcat7 Tomcat がウェブアプリのデータを保存するフォルダ。

初期設定

マネージャウェブアプリや管理者ウェブアプリを使用するには次のファイルを編集する必要があります: /etc/tomcat7/tomcat-users.xml

XML 宣言の "role and user" をアンコメントして、必要に応じてロール tomcat, {{Ic|admin-{gui,script} }}, {{Ic|manager-{gui,script,jmx,status} }} を有効にしてください (Configuring Manager Application Access を参照)。簡単に説明すると、tomcat は tomcat を実行するのに必須のロールで、manager-* はウェブアプリケーションを管理することができるロール、admin-* は Tomcat サーバーに関する全ての権限を持つ管理者です。

上記のロールとユーザー名、パスワードを定義すると以下のようになります ([CHANGE_ME] は適当なパスワードに置き換えてください):

/etc/tomcat7/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <user username="tomcat" password="[CHANGE_ME]" roles="tomcat"/>
  <user username="manager" password="[CHANGE_ME]" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
  <user username="admin" password="[CHANGE_ME]" roles="admin-gui"/>
</tomcat-users>

上記のファイルに修正を加えたら、都度、Tomcat を再起動する必要があります。

ロールについては このブロク記事 に詳しい説明があります。

IDE と統合するために設定ファイルの読み込み権限を設定するには、tomcat グループ (使用しているバージョンによって tomcat7 または tomcat8 となります) にユーザーを追加してください:

# gpasswd -a <user> tomcat<number>

Tomcat の起動・停止

tomcat7 (または tomcat8) サービスを起動してください。

Tomcat を起動したら、次のページを開いて動作していることを確認します: http://localhost:8080。素敵な Tomcat のローカルホームページが表示されたら、Servlet コンテナが問題なく立ち上がっています。起動スクリプトが上手く動作しなかった場合、ブラウザには Java のエラーだけが表示されます。systemd の journalctl を使って起動ログを確認してください。Tomcat のログに書かれている問題の答えは全て Google にあります。

ノート: セキュリティを確保するために、Arch Linux の Tomcat パッケージは Apache の common-daemonsjsvc バイナリを使っています。Tomcat の systemd サービスは Apache のバイナリを root 権限で実行しますが、Tomcat は非特権ユーザーで起動されます (Arch Linux の場合 tomcat7:tomcat7)。これによって、悪意のあるウェブアプリケーションによる攻撃コードの実行を防ぐことができます。また、必要な場合、1024番ポートが使われます。/etc/conf.d/tomcat7CATALINA_OPTS 環境変数で指定することができるオプションについては man jsvc を参照してください。

手動で操作する方法

上流のスクリプトを使って Tomcat を直接制御することもできます:

/usr/share/tomcat/bin/{startup.sh,shutdown.sh,..}

アプリケーションや Tomcat をデバッグするときは上記のコマンドが役に立ちますが、一番最初に Tomcat を起動するときには systemd を使ってください。パーミッションが間違って設定されてウェブアプリが実行できなくなる可能性があります。また、上記のスクリプトを使用するには多少の設定が必要になります。上のノートに書かれている jsvc のセキュリティ機構が使えなくなることにも注意してください。

ウェブアプリケーションのデプロイと管理

Tomcat 7 には5つのウェブアプリケーションがバンドルされています (場合によっては localhost をサーバーの FQDN に変えてください):

GUI を使用する

マネージャウェブアプリ http://localhost:8080/manager/html を使用するのが一番簡単な方法です。tomcat-users.xmlmanager に定義したユーザー名・パスワードを使ってください。ログインしたら、既に5つのウェブアプリケーションがデプロイされていることが確認できます。"Deploy" エリアからアプリケーションを追加して "Applications" エリアでアプリケーションを停止・起動・削除します。

CLI を使用する

WAR ファイルをアプリケーションディレクトリにコピーする方法もあります: /usr/share/tomcat7/webapps。その場合、以下のように適切なホストで autoDeploy オプションが設定されていることを確認してください:

/etc/tomcat7/server.xml
...
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
...

webapps フォルダ以外にあるファイルをホスト

Context を作成することで、プロジェクトを webapps フォルダ以外に配置することができます。/etc/tomcat<number>/Catalina/localhost/ を開いてコンテキストを作成してください。コンテキストはシンプルな xml ファイルで、tomcat が参照するべきディレクトリを指定します。ファイルの基本的なフォーマットは以下のようになっています:

/etc/tomcat7/Catalina/localhost/whatShouldFollowLocalhost.xml
<Context path="/whatSholdFollwLocalhost" docBase="/where/your/project/is/" reloadable="true"/>

実際の例は以下です。ユーザーの /home フォルダにプロジェクトを配置しています:

/etc/tomcat7/Catalina/localhost/myProject.xml
<Context path="/myProject" docBase="/home/archie/code/jsp/myProject" reloadable="true"/>

上記のように設定すると /home/archie/code/jsp/myProject/ にプロジェクトのファイルを置くことができ、ウェブブラウザでプロジェクトを確認したいときはhttp://localhost:8080/myProject を開きます。tomcat がファイルをロードできない場合、おそらくパーミッションに問題があります。chmod o+x /home/archie/code/jsp/myProject を実行してください。

ログ

公式の Arch Linux パッケージの Tomcat は systemd の journalctl で起動ログを記録します。/var/log/tomcat7/catalina.err/var/log/tomcat7/catalina.out ファイルは使われません。/etc/tomcat7/server.xmlValve と定義されている、アクセスログやビジネスログなどのログはデフォルトのまま /var/log/tomcat7/ に記録されます。

上流のようにログを保存したい場合、systemd ファイル /lib/systemd/system/tomcat7.service/etc/systemd/system/tomcat7.service にコピーして、ログファイルの絶対パスを指定する SYSLOG を変更してください。

ヒントとテクニック

基本的な設定はバーチャルホストのウェブアプリケーションで行うことができます: http://localhost:8080/host-manager/htmltomcat-users.xml で設定したユーザー名とパスワードを使ってください。他のオプションについては /etc/tomcat7 の設定ファイル (特に server.xml) で変更できます。詳しくは Tomcat 7 の公式ドキュメント を参照。

前のバージョンの Tomcat からの移行

上に書いてあるように、Tomcat 8 によって Tomcat 7 が使えなくなることはありません。2つとも Servlet/JSP 標準の実装です。まず、あなたが使用したいアプリケーションがどのバージョンの Servlet/JSP を必要するのかによって Tomcat の 使用するバージョン を選択する必要があります。バージョンの移行が必要なときは、公式ウェブサイトに 移行を行う手順 が書かれています。

別の JRE/JDK で Tomcat を使用する

推奨されている JRE/JDK をインストールしない場合、Tomcat の systemd サービスファイルで TOMCAT_JAVA_HOME 変数を設定してください。

Systemd#ユニットファイルの編集に書かれているように、カスタム設定で変数を上書きすることができます:

  1. /etc/systemd/system/tomcat7.service.d ディレクトリを作成
  2. 作成したディレクトリの中に以下の内容で start.conf ファイルを保存 (Oracle の JDK パッケージ jdkAUR を使用する場合、/usr/lib/jvm/java-8-jdk としてください):
[Service]
Environment=TOMCAT_JAVA_HOME=/usr/lib/jvm/java-8-openjdk

もしくは、サービスファイル /usr/lib/systemd/system/tomcat7.service/etc/systemd/system/ にコピーして次の行を:

Environment=TOMCAT_JAVA_HOME=/usr/lib/jvm/java-7-openjdk

以下のように置き換えてください (例: Oracle JDK):

Environment=TOMCAT_JAVA_HOME=/opt/java

セキュリティ設定

このページはあくまで Tomcat の上でウェブアプリケーションを動かすために必要な最低限の設定について説明しています。Tomcat の管理に関する総合的なガイドではありません。必要な情報は Tomcat の公式サイトで収集できます。O'Reilly のページ大気研究大学連合のページ も参照すると良いでしょう。セキュリティのヒント:

  • Tomcat 環境は常にセキュリティフィックスが適用された最新状態にしてください。
  • 不必要な examples, docs, ROOT (manager ウェブアプリの "_") などのデフォルトアプリケーションは削除してください。セキュリティホールになってしまう可能性があります。manager を使ってください。

セキュリティを高めたい場合、host-manager と manager ウェブアプリケーションも削除します。ただし、後者はウェブアプリケーションのデプロイに役立ちます。

  • WAR の自動デプロイオプションは無効化してください。/usr/share/java/webapps ディレクトリに WAR ファイルをコピーする権限が盗まれても勝手に実行されなくなります。server.xml を編集して autoDeployfalse に設定:
/etc/tomcat7/server.xml
...
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false">
...
  • Tomcat のデフォルトエラーページを変更することで Tomcat のバージョンの漏洩を防げます。デフォルトで Tomcat がどのような表示をするのか確認するには、http://localhost:8080/I_dont_exist など適当なページを開いてみてください。ページの末尾に Tomcat のバージョンが記載されていることが確認できます。

変更するには、以下の JAR を編集してください (vim などのエディタは zip を直接編集できます):

/usr/share/tomcat7/lib/catalina.jar

そして以下のファイルを編集します:

org/apache/catalina/util/ServerInfo.properties
...
server.info=
server.number=
server.built=
...
  • server.xml の使用していない connectors を無効化してください。
  • Keep restricted access to /etc/tomcat7/server.xml. Only tomcat user and/or root should be able to read and write this.
  • Keep jsvc usage. Do not use upstream startup scripts unless particular reason as explained in the security note above.
  • Use strong different passwords for each user in tomcat-users.xml, give roles to users who really need them and even disable usernames/roles you do not use/need.

以下のようにスクリプトを使うことで tomcat-users.xml のパスワードを暗号化できます:

/usr/share/tomcat7/bin/digest.sh -a SHA NEW_PASSWORD

以下のように出力されます:

NEW_PASSWORD:b7bbb48a5b7749f1f908eb3c0c021200c72738ce

ハッシュ化された部分を tomcat-users.xml に貼り付けて平文のパスワードを置き換えてください。そして server.xml に以下を追加:

/etc/tomcat7/server.xml
<Host
  ...
  <Realm
    ...
    className="org.apache.catalina.realm.MemoryRealm" digest="SHA"
    ...
  />
  ...
/>

Note that this may not be relevant because only root and/or tomcat is supposed to have read/write access to that file. If an intruder manages to gain root access then he would not need such passwords to mess with your applications/data anyway. Be sure to keep restricted RW access to that file!

  • Always know what you are deploying