Skip To Content

ArcGIS Notebook Server へのリバース プロキシ サーバーの設定

リバース プロキシ サーバーとは、境界ネットワーク (非武装地帯またはスクリーン サブネットとも呼ばれる) 内に配置され、インターネットからのリクエストを処理して内部ネットワーク内のコンピューターに転送するコンピューターです。 リバース プロキシ サーバーは、リクエストを転送することで、組織サイトのファイアウォールの内側にあるコンピューターのアイデンティティをマスクするため、インターネット ユーザーによる直接的な攻撃から内部のコンピューターを保護できます。 さらに進んでユーザーの内部ネットワークを外部ユーザーから保護するために、追加のセキュリティ機能をリバース プロキシ サーバーに実装できます。

組織のリバース プロキシ サーバーを使うよう ArcGIS Notebook Server サイトを構成することができます。 これはオプションです。 組織でリバース プロキシを使用していない場合、またはリバース プロキシを使用するよう ArcGIS Notebook Server サイトを構成しない場合は、ポータルへのサイトの構成に進んでください。

リバース プロキシ サーバーへの ArcGIS Notebook Server の追加

組織のリバース プロキシ サーバーは、対応する URL をプロキシ ディレクティブに追加して ArcGIS Web Adaptor と通信するように構成する必要があります。

たとえば、リバース プロキシ サーバーとして Apache を使用している場合は、Apache Web サーバー構成ファイル httpd.conf で、ProxyPass ディレクティブに ArcGIS Web Adaptor の URL を以下のように追加する必要があります。

ProxyPass /notebook https://notebookserver.domain.com/notebook
ProxyPassReverse /notebook https://notebookserver.domain.com/notebook

ほとんどのリバース プロキシ サーバーには、構成可能なクライアント接続タイムアウトがあります。 Python カーネルと通信するために ArcGIS Notebook Server によって使用される WebSocket 接続は、接続タイムアウトに達すると切断され、ノートブック内に通知が表示されます。 これが一定の間隔で (たとえば、カーネルへの再接続後 1 分、3 分、または 5 分ごとに) 発生する場合は、ネットワーク パスへの接続タイムアウトを調べて、適宜増やす必要があります。

WebContextURL プロパティの設定

リバース プロキシ サーバーを使用している際に、サイトの URL の末尾がデフォルト文字列 /arcgis (すべて小文字) でない場合は、ArcGIS Notebook ServerWebContextURL プロパティも設定する必要があります。 これにより、ArcGIS Notebook Server はリソースで正しい URL を構築して、エンド ユーザーに送信することができます。

注意:

WebContextURL プロパティを使用して ArcGIS Notebook Server の URL がその ArcGIS Web Adaptor (/notebook など) に一致するように設定します。

WebContextURL プロパティを変更するには、次の手順を実行します。

  1. 管理者権限を持つユーザーとして、https://notebookserver.domain.com:11443/arcgis/adminArcGIS Notebook Server Administrator Directory にサイン インします。
  2. [system] > [properties] > [update] の順にクリックします。
  3. [Properties] テキスト ボックスに次の JSON を挿入します。ArcGIS Notebook Server の URL は、ユーザーが組織のファイアウォールの外側から参照できる URL に置換します。
    {
       "WebContextURL": "https://notebookserver.domain.com/notebook"
    }
  4. [更新] をクリックします。
  5. ArcGIS Notebook Server を再起動します。 Windows 上で、[ArcGIS Server] Windows サービスを再起動します。

リバース プロキシ ヘッダーと ArcGIS Notebook Server

リバース プロキシを ArcGIS Web Adaptor と統合する際は、リバース プロキシ サーバーによって送信されるヘッダー内に次のプロパティを設定する必要があります。

X-Forwarded-Host=<FQDN of reverse proxy server>

このプロパティがヘッダーに設定されている場合、ArcGIS Web Adaptor は、そのリバース プロキシ サーバーの URL に一致するリバース プロキシ サーバーにリクエストを返します。 たとえば、ArcGIS Notebook Server Services Directory (https://reverseproxy.domain.com/arcgis/rest/services) に対するリクエストは、同じ URL としてクライアントに返されます。

X-Forwarded-Host ヘッダー プロパティが設定されていない場合、ArcGIS Web Adaptor は、リクエストが転送された内部コンピューターの URL を返すことがあります (たとえば、https://reverseproxy.domain.com/arcgis/rest/services ではなく https://notebookserver.domain.com/arcgis/rest/services)。 このような場合は、クライアントがこの URL にアクセスできなくなる (一般的に、ブラウザーの 404 エラーとして知られている) ため、問題が起こりがちになります。 また、クライアントはその内部コンピューターについての情報を一部入手することにもなります。

クライアントと ArcGIS Web Adaptor 間の通信のトラブルシューティングを行う際は、リバース プロキシ サーバーで X-Forwarded-Host ヘッダー プロパティを設定することをお勧めします。このプロパティの有無が通信障害の一般的な原因であるからです。 このヘッダーの設定方法は、ユーザーのリバース プロキシ サーバーの実装によって異なります。

元のホストのヘッダーを渡す方法については、ユーザーのリバース プロキシ サーバーの製品ドキュメントをご参照ください。

可用性の高い ArcGIS Notebook Server サイトのリバース プロキシ サーバーの構成

1 つの ArcGIS Notebook Server サイトに登録されている ArcGIS Web Adaptor を実行する複数のバックエンド ターゲットを持つリバース プロキシ サーバーを実装する場合は、考慮する必要がある追加の注意事項があります。

ArcGIS Notebook Server は、WebSocket 接続を使用して、Python カーネルと通信します。 この WebSocket 接続は、リバース プロキシ構成によって管理される必要があるステートフル セッションを作成します。 これはセッション スティッキネスと呼ばれ、実装にはレイヤー 7 (アプリケーション) ロード バランサーを必要とします。

以下によって、Apache で適切なセッション スティッキネスを実装できます。

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy balancer://web_adaptors_https>
    BalancerMember https://notebook1.domain.com:443 route=notebook1
    BalancerMember https://notebook2.domain.com:443 route=notebook2
    BalancerMember https://notebook3.domain.com:443 route=notebook3

    ProxySet lbmethod=byrequests
    ProxySet stickysession=ROUTEID
</Proxy>

WSS (Secure WebSocket) 接続を同じバックエンド ターゲットにプロキシすることも重要です。

<Proxy balancer://web_adaptors_wss>
    BalancerMember wss://notebook1.domain.com:443 route=notebook1
    BalancerMember wss://notebook2.domain.com:443 route=notebook2
    BalancerMember wss://notebook3.domain.com:443 route=notebook3

    ProxySet lbmethod=byrequests
    ProxySet stickysession=ROUTEID
</Proxy>