CookBook

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

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

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

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

注意事項

Internet Information Services (IIS) の設定

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

前提条件

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

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

手順

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

intra-mart AccelPlatform のコンテキストパス imart
IIS のルート ディレクトリ C:\inetpub\wwwroot
静的ファイルの展開フォルダ C:\imart
intra-mart AccelPlatform の IP アドレス 192.168.1.2
intra-mart AccelPlatform のポート番号 8080
IIS の IP アドレス 192.168.1.1
IIS のポート番号 80
  1. web.config を以下のように変更します。
    【変更前】

    【変更後】
  2. 「Default Web Site」、「URL 書き換え」、をダブルクリックします。
  3. 「サーバ変数の表示」をクリックします。
  4. 「追加」をクリックします。
  5. 「サーバー変数名」に「HTTP_X_COM_BASE_URL」を入力し、「OK」をクリックします。
  6. https://www.intra-mart.jp/document/library/iap/public/setup/iap_setup_guide/texts/install/windows/iis_arr.html#oauthcommon-int-win-auth

  7. OAuth認証モジュール、または統合Windows認証モジュールのリダイレクト機能を利用する場合の追加設定」 を実施している場合は web.config を以下のように変更します。
  8. IIS を再起動してください。

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

執筆者:


comment

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

関連記事

IM-BloomMaker のアクション「URL ○ にリクエストを送信する」の使い方

このCookBookでは、「URL ○ にリクエストを送信する」アクションを使ってサンプル画面を作成する方法を紹介します。 2019 Summer では「URL ○ にアクセスする」でしたが、 201 …

no image

intra-martのアプリケーションをセットアップする

このCookBookでは、intra-mart Accel Collaborationをセットアップしてアプリケーションを使える状態にする方法を紹介します。レシピの最後では、実際にintra-mart …

no image

ViewCreatorのヘッダやフッタに配置するリンクのURLに計算結果を埋め込む方法

本記事では、ViewCreatorのヘッダやフッタにリンクを埋め込む際に、関数を利用する方法をご紹介します。 この方法を利用すると、パラメータ文字列に「今日日付」を受け渡すといったことが実現できます。 …

no image

ワークスペースとスケジュール機能との連携

このCookBookでは、「intra-mart Accel Collaboration」の機能の1つであるワークスペースと「intra-mart Accel Collaboration」のスケジュー …

no image

スクリプト開発した画面にバリデーション(入力チェック)を実装する

このCookBookでは、作成した画面項目に対してバリデーション(入力チェック)を設定する方法をご紹介します。 今回はスクリプト開発で登録フォームを作成するで作成した画面項目に対して、クライアントサイ …

RSSRSSRSSRSS