2016年9月28日水曜日

Tomcatとクラウドサービスを組み合わせる場合のメモ

従来、ネットワークやミドルウェアで設定していた分野のクラウドサービスの充実に伴って、アプリサーバの構築方法も変わってきました。

AWSのapi-gateway+lambdaのような組み合わせでサーバレスにすることも可能です。

Tomcatなどもまだまだ現役ですので、今回は、Tomcatとクラウドサービスを組み合わせて作る場合のメモです。

方針

  • インフラ部分は、AWSなどクラウド基盤のサービスをできるだけ使う
  • 基本的に、サーバはアプリのみを使い、できるだけシンプルにする

tomcatの設定

Context

  • 基本、コンテキストパスは一個にする。
  • server.xmlで直指定。コンテキストxmlは、複数のコンテキストを複雑に使う場合。

    <Server ...>
    ...
      <Context path="/"
    docBase="/opt/tomcat/html/ROOT" />
      <Context path="/v1"
    docBase="/opt/tomcat/html/v1" />
    ...
    </Server>

web.xml

  • 上記のWEB-INFに直接設置
  • servlet-mappingでurlパターンとマッチさせる
  • 対応するHTTPメソッドを設定する

HTTPサーバとの連携

この辺りは、できるだけクラウドインフラで行う。

  • ロードバランサ
  • SSL
  • ディレクトリ単位のアクセス制限
  • IP制限

nginx

プロキシ設定

 server {
 ...
   location / {
     proxy_pass http://127.0.0.1:8080;
   }
 }

リバースプロキシを設定するには、SELinuxの設定変更が必要. nginx リバースプロキシ設定時の502 Bad Gatewayエラーを解消する方法

setsebool -P httpd_can_network_relay=1

他にも、ドキュメントルートの変更などSELinuxを変更する必要がある。

その他

この辺りは、httpサーバでしておいた方が安心です。

存在しないパス

  • 200で独自のエラーコードを持ったJSONを返す。
  • 404エラーを返す

Method Not Allowed

  • 許可メソッドを指定する。
  • 200で独自のエラーコードを持ったJSONを返す。
  • 405エラーを返す
  • nginxの444を使う。

死活監視

  • 死活監視用のページを表示させる.
  • example.com/check.html

0 件のコメント:

コメントを投稿