投稿

Tomcatの設定6:例外エラー発生時の独自エラー画面の方法

Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 GeneXusが予期しない例外エラーについてはJavaのエラーがそのまま表示されます。 ※予期しない例外とは、プログラムエラーやミドルウェアのエラーなどです。 GeneXusの画面やプロシージャでError_Handlerが設定してあれば、「DBからの例外エラー」はある程度対処することが出来ますが、プログラムミスによる例外エラーや、TomcatからのメモリオーバーフローなどはそのままJavaのエラー画面が出ることになります。 error_handler コマンド http://wiki.genexus.jp/hwiki.aspx?error_handler+コマンド, Javaのエラー画面をそのまま表示することはセキュリティ的にも避けたほうが良く、その対処は、TomcatのErrorPage設定で行います。 ※詳細のサーバー情報をユーザーに見せないように防止することが望ましい Tomcat\webapps\<アプリケーションディレクトリ>\WEB-INF\web.xml 記述場所は<web-app> ~ </web-app>の間 <error-page> <error-code>505</error-code> <location>/error_page.html</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error_page.html</location> </error-page> この設定で、例外エラーが発生した場合にはerror_page.htmlに遷移します。 遷移先をGeneXusの画面にするのはやめておいた方が良いです。 DB接続でエラーになったのに、GeneXusの画面を実行したら、さらにDB接続でエラーになってしまいますので。

Tomcatの設定5:メモリ調整と起動モード

イメージ
Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 Tomcatのデフォルトでは初期メモリが128MB、最大が256MBとなっています。 市販のパソコンでもメモリは4GBや8GBは有りますので、初期値は非常に小さいです。 Linuxの場合は、Tomcatの起動オプションで、設定してください。 WindowsのTomcatの場合は設定コンソールから設定します。 サーバーのスペックや構成に合わせて必ず調整した方が良いものは以下の内容になります。 1.メモリ(ヒープ領域) -Xms :Initial memory pool -Xmx :Maximum memory pool Tomcat起動時に初期メモリが確保され、不足したら拡張を繰り返す形となります。(最大値まで) 個人的にはどうせ拡張するのであれば、初期メモリの時点である程度確保しておいた方が良いと考えてます。 その方が拡張の際の処理動作コストも軽減されますので。 どの位の設定が良いのかは一概には言えず、 私の経験則からの例ですが、総メモリが8GBで、TomcatとPostgreSQLが同居したサーバーの場合であれば、初期2GB、最大3GB位の設定にしますね。 2.起動モード Tomcatには起動モードが2種類あり、「クライアントモード」と「サーバモード」があります。 <クライアントモード> 起動時間を短縮し、メモリサイズを縮小するように調整されている。 起動時に「-client」オプションを付けて実行する。 <サーバーモード> プログラム実行速度が最大になるように設計されている。 起動時に「-server」オプションを付けて実行する。 運用時にはサーバーモードで動作させるようにしましょう。 3.メモリ(Permanent領域) -XX:PermSize ・・・ Permanent 領域の初期値 こちらは運用中の影響ではなく、Tomcatが起動できるかどうかという設定です。 プログラムが大量にある場合、Tomcat起動時にロードしきれずにエラーになったり、 起動が遅かったりしますので、その際には拡張した方が良いです。 サーバーモードの初期値は64MBです。 システムの規模がそこそ...

Tomcatの設定4:セキュリティ関連の調整

イメージ
Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 セキュリティ関連は常々追加されていますので、これだけ実施すれば大丈夫。ということはありません。 定期的に脆弱性情報をチェックして、バージョンアップや設定追加を行っていくことを踏まえた 運用計画と運用体制を考えていくのが現実的な方法でしょう。 JVN iPedia https://jvndb.jvn.jp/ IPA(独立行政法人 情報処理推進機構) 重要なセキュリティ情報一覧 https://www.ipa.go.jp/security/announce/alert.html 1.不要なアプリケーションディレクトリの削除 TomcatをそのままインストールするとTomcat\webappsにdocsやexamplesなどが入ります。 運用には不要ですので削除しましょう。 managerはTomcatの管理コンソールです。 運用には便利ですが、使わないのであれば削除しましょう。 もし使う場合はIDとパスワードを変更することを忘れずに。 2.HTTPヘッダー情報から不要な情報を削除 HTTPレスポンスには色々な情報が載っており、こちらを対策することがセキュリティ確保に有益ということです。 セキュリティ診断などを行うと必ずチェックされる部分です。 ◆サーバーの製品情報、バージョン情報が含まれないようにする 何も対応をしていないと、HTTPレスポンスヘッダーに  Server: Apache-Coyote/1.1 というサーバー製品とバージョン情報が出てきます。 これを削除するにはTomcat\conf\server.xmlを修正します。 <Connector port="8080" protocol="HTTP/1.1"     server="hoge-hoge"     connectionTimeout="20000"     redirectPort="8443" /> こちらの対応を行うと、server=""に設定した内容が表示される形となります。 ...

Tomcatの設定3:8080ポート以外で動作させる

Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 Tomcatのデフォルトではポート8080で動作します。 URLがhttp://localhost:8080/xxxxx/servlet/xxxxxという形になりますね。 こちらをポート80(http)で動作するようにすると、 URLからポートの記述を省略することができます。 http://localhost:8080/xxxxx/servlet/xxxxx ↓↓↓ http://localhost/xxxxx/servlet/xxxxx http://localhost:80/xxxxx/servlet/xxxxx と同じ 同じように、SSLを使ってhttpsにする場合はTomcatのデフォルトは8443ですが、 443(https)ポートで動作するようにすると、こちらも省略できます。 https://localhost:8443/xxxxx/servlet/xxxxx ↓↓↓ https://localhost/xxxxx/servlet/xxxxx https://localhost:443/xxxxx/servlet/xxxxx と同じ <設定方法> ※Apacheと連携する場合はApacheが80ポートで動作しますので、 以下の設定方法は、”Tomcatのみ”で動作させる場合の設定方法となります。 Tomcat\conf\server.xmlを修正します。 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ↓↓↓ <Connector port=" 80 " protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 以上です。 SSL(https)を設定済みの場合は8443と記載の個所を443に変...

Tomcatの設定2:アクセスログの活用

Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 Tomcatはデフォルトでアクセスログが出力されます。 インストールフォルダのTomcat\logs\localhost_access_log.YYYY-MM-DD.txtです。 こちらの設定がTomcat\conf\server.xmlで調整できます。 <!-- Access log processes all example.      Documentation at: /docs/config/valve.html      Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"      prefix="localhost_access_log" suffix=".txt"      pattern="%h %l %u %t &quot;%r&quot; %s %b %D" /> 少々バージョンが古いですが、設定内容は以下のURLが参考になります。 Tomcatのアクセスログを出力する http://www.m-bsys.com/code/tomcat-accesslog デフォルトが日付毎のローテートですし、出力内容としても特に問題はないと思いますが、 追加で「処理時間(sec)」を出力するようにしておくと、 リクエストに時間が掛かったアクセスを分析することが出来て良いかと思います。 分析方法は「アクセスログ分析ソフトやサービス」といったものが色々とありますので、 そちらを使っていくのだと思いますが、そこまでは私も実施したことが無いです。

Tomcatの設定1:データソースを使用する方法とメリット

イメージ
GeneXusに限った話ではないのですが、 ジェネレータにJavaを選んだ場合はTomcatを利用することが多いかと思いますので、 Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。 GeneXusのデフォルト設定だと、DBへの接続方法はJDBCで、 コネクションプーリングもアプリケーション側で実施する形となります。 [Enable Connection Pooling] プロパティ http://wiki.genexus.jp/hwiki.aspx?%5BEnable+Connection+Pooling%5D+プロパティ, このままでも特に問題は無いのですが、 私の経験上、Tomcatのデータソースを利用する方が安定性が少し上がります。 数年前の事例ですが、サーバーを起動したまま運用を続けていくと、 徐々にTomcatのメモリが蓄積されていき、数週間すると動きが悪くなってくる。という現象がありました。 サーバースペックや、利用人数、アプリ側の作り方など、色々と影響は考えられますが、 何か特定の処理や操作をした場合ではなく、少しづつゴミデータが蓄積されているような状況でした。 このシステムでTomcatのデータソースを利用するようにしたところ、 問題が解消され、メモリが綺麗に開放されるようになった。 という経験があります。 このことから、Tomcatのデータソースを利用した方が、安定性が良いのかと思う次第です。 やはり世界中の技術者に10年も20年も使い込まれたTomcatは性能や品質が良いのでしょうね。 ただ、まあ、運用計画的に1週間に1回位は再起動をした方が 何かと良いのではないかとも思いますけどね。 <設定方法> 1.TomcatのcontextにDB情報を定義する Tomcat\conf\context.xmlか、 Tomcat\conf\catalina\localhost\<アプリケーション名>.xmlのどちらかに記述する 記述場所は<Context> ~ </Context>の間 <Resource name="jdbc/ 【任意のデータソース名】 " auth=...

セミナー情報

イメージ
超高速開発&エンタープライズアジャイル2019 https://www.nikkeibp.co.jp/seminar/event/ssd190523/ 5月23日(木)に「日経 xTECH」主催でセミナーが行われます。 基調講演の「会計検査院で初めて挑んだアジャイル開発」が、 私が携わったプロジェクトとなっています。 興味があれば是非ご参加ください。 ウイングGeneXusセミナー2019 http://weing-genexus.com/News/gx_seminar2019.html 5月24日(金)に株式会社WeING様のセミナーが行われます。 カナディアン・ソーラー・ジャパン株式会社様の事例は GeneXusを活用したアジャイル開発、短納期を実現した事例でして、 私が携わったプロジェクトです。 株式会社大成情報システム様の事例は フリーアドレスの座席表を管理するシステムで、画面上でイスや机を動的に配置したり、 タッチパネルで自分が今日座る席を選択したりといった面白いUIをもっており、 GeneXusとHTML&Javascriptを組み合わせたハイブリッド構成です。 こちらは私は少し技術支援という所でした。 興味があれば是非ご参加ください。