CookBook

WebServer へのリクエスト情報から動的に BaseURL を決定する方法(Apache 編)

投稿日:2021-01-15 更新日:

ここでは、WebServer(Apache)へのリクエスト情報から BaseURL を動的に決定する方法を BaseUrlProvider のサンプル実装、Apache との連携例と共に紹介します。
製品標準の設定では、テナント一つにつき、一つの BaseURL のみが設定可能ですが、BaseUrlProvider インタフェースを実装することで、複数の BaseURL を持たせることができます。
BaseUrlProvider は intra-mart Accel Platform 2014 Summer (Honoka) から導入されたインタフェースです。
したがって、2014 Summer (Honoka) 以降で使用可能です。

WebServer が IIS の場合はこちら

図のようにクライアントから WebServer へアクセスする URL の情報を利用して、WebServer(Apache)で BaseURL を作成します。
さらに、WebServer で作成した BaseURL を HTTP Header に追加して、intra-mart AccelPlatform(Resin)へ渡します。
intra-mart AccelPlatform では、BaseUrlProvider を用いて HTTP Header を確認し、渡された BaseURL を利用します。

注意事項

Apache HTTP Server の設定

mod_headers モジュールを利用し、リクエスト情報を元に HTTP Header (x-com-base-url)に BaseURL を設定します。

前提条件

  • 「静的ファイルの配置」がされていること。
  • 「アクセスログの編集」の設定がされていること。
  • 設定手順は セットアップガイド-Apache HTTP Server を参照してください。
  • Apacheの稼働しているサーバへ2つのドメイン名からアクセスできるようにします。(app1.example.com および app2.example.com)
    試験的に名前解決を行う場合はブラウザを利用するマシンのhostsファイルにドメイン名を記述します。
    実際の運用ではDNSで名前解決できるようにしてください。

    1. Windowsの場合は、C:\Windows\System32\drivers\etc\hosts に以下を追加します。
    2. ApacheサーバのIPアドレスが192.168.1.1の場合

モジュールの取得

以下の Apache モジュールを利用します。

  • mod_proxy
  • mod_rewrite
  • mod_headers

手順

以降の手順では下記の環境を想定しています。

intra-mart Accel Platform のコンテキストパス imart
Apache のドキュメントルート /usr/local/apache/htdocs
静的ファイルの展開フォルダ /usr/local/apache/htdocs/imart
intra-mart Accel Platform の IP アドレス 192.168.1.2
intra-mart Accel Platform のポート番号 8080
Apache の IP アドレス 192.168.1.1
Apache のポート番号 80
  1. <%APACHE_HOME%/conf/httpd.conf> ファイルを開きます。
  2. Dynamic Shared Object (DSO) Support エリアに以下の設定を追加またはコメントアウトを外してください。
  3. 以下のように RequestHeader の設定(22 および 23行目)を2行追加してください。
  4. Apache を再起動してください。

BaseUrlProvider の実装

HTTP Header に応じて異なる BaseURL を返却する BaseUrlProvider を実装します。

  1. 以下の内容のファイルを WEB-INF/classes/com/example/HttpHeaderBaseUrlProvider.java として保存します。
    1. HTTP Header「x-com-base-url」の値を BaseURL として利用します。
      「x-com-base-url」が存在しない場合は、後続の BaseUrlProvider に処理を委ねます。
  2. 以下の内容のファイルを WEB-INF/classes/META-INF/services/jp.co.intra_mart.foundation.platform.BaseUrlProvider として保存します。
  3. intra-mart AccelPlatform を起動してください。

動作確認

以下を確認してください。

応用

図のようにクライアントと WebServer の間に Load Balancer がある場合
WebServer で HTTP Header(x-com-base-url)を設定するのではなく、Load Balancer で作成した BaseURL を HTTP Header(x-com-base-url)に設定するようにしてください。
これは、クライアントが最初にアクセスするサーバが Load Balancer となるためです。

-CookBook
-,

執筆者:


  1. […] ・WebServer が IIS の場合はこちら ・WebServer が Apache の場合はこちら […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Forma標準アプリとIM-LogicDesignerを利用してBISワークフローの一括承認画面を作成する

このCookBookでは、Forma標準アプリとLogicDesignerを利用して、BISワークフローの一括承認画面を作成する方法を紹介します。 完成イメージ ① 承認を実施するフローとノードを設定 …

標準の画面アイテムを利用して「先頭へ戻る」ボタンを実現する

このCookBookでは、標準の画面アイテムを利用して「先頭へ戻る」ボタンを実現する方法について紹介しています。 本稿では、表示する項目が多く縦長い画面で下へスクロールすると右下に「先頭へ戻る」ボタン …

IM-BloomMaker カスタムスクリプトの使い方と$variableからの取得・代入の方法

このCookBookでは、IM-BloomMakerのアクションの一つであるカスタムスクリプトの使い方と$variable(変数)からの取得および代入の方法について紹介しています。 実際にサンプル画面 …

no image

祝日や会社の予定を設定したカレンダーを作成する

このCookbookでは、祝日や独自の予定を設定したカレンダーを活用する方法について紹介します。テナント管理者はカレンダーの作成、メンテナンスを行えます。また、テナントのデフォルトカレンダーを設定でき …

画面アイテム「スプレッドシート」の特定セルをIM-ContentsSearchの検索対象にする方法

画面アイテム「スプレッドシート」の特定セルをIM-ContentsSearchの検索対象にする方法について紹介します。 本CookBookでは、スプレッドシート上の個人情報や、外部に公開したくない内容 …