Skip to main 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 Server の WebContextURL プロパティも設定する必要があります。 これにより、ArcGIS Notebook Server はリソースで正しい URL を構築して、エンド ユーザーに送信することができます。

注意:

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

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

  1. 管理者権限を持つユーザーとして、https://notebookserver.domain.com:11443/arcgis/admin の ArcGIS 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 サービスを再起動します。

  6. ArcGIS Notebook Server を再起動します。 Linux では、インストール フォルダー内の stopnotebookserver.sh スクリプトと startnotebookserver.sh スクリプトを実行します。

リバース プロキシー ヘッダーと 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>

例: ArcGIS Notebook Server への Apache と Tomcat の構成

任意の Web サーバー ソフトウェアを使って ArcGIS Notebook Server にリバース プロキシーを構成できます。 以下のワークフロー サンプルでは、Apache HTTP Server と Apache Tomcat を使ってリバース プロキシーを設定する手順について説明します。 これはあくまでリバース プロキシー構成の一例であり、必ずしもこれに従う必要はありません。

このワークフロー サンプルでは、以下のソフトウェアとバージョンを使用し、ArcGIS Notebook Server としてすべて同じコンピューターにインストールします:

  • Red Hat Enterprise Linux Server 7.5

  • Apache HTTP Server, httpd 2.4.6

  • Apache Tomcat 9.0.20 / OpenJDK 1.8.0

これらのソフトウェア コンポーネントは分散アーキテクチャーに配置し、ArcGIS Notebook Server、Apache HTTP Server、Apache Tomcat をそれぞれ別のコンピューターに配置できます。

ArcGIS Notebook Server と Mirantis Container Runtime のインストールと構成が完了し、ArcGIS Web Adaptor インスタンスの Java Web サーバーへのインストールが完了していて構成が終わっていない状態で以下の手順を開始します。

  1. Apache JServ Protocol (AJP) を使って、デフォルトで有効になっているポート 8080 で実行されるように Tomcat をインストールします。

  2. Tomcat ではデフォルトでポート 8443 が有効になっていないため、SSL を有効にしてポート 8443 のコネクターを追加します。

    これを行うには、SSL 証明書を生成して Tomcat 構成ファイルを編集し、コネクターに追加します。 セキュリティー上のベスト プラクティスとして、TLS バージョン 1.2 だけを有効にします。

    ...
    sslProtocol="TLS" SSLProtocol="TLSv1.2"
    ...
    
  3. 既存の ArcGIS Web Adaptor (Java Platform) の arcgis.war ファイルを Tomcat にデプロイします。

    たとえば、ArcGIS Web Adaptor の URL は /nbs です。

  4. Apache HTTP Server をインストールします。

    この例では、yum パッケージ マネージャーを使用しています。 また、yum を使って SSL 機能もインストールしています。

    yum install httpd -y
    yum install mod_ssl -y
    
  5. ssl.conf ファイルで Apache HTTP Server の SSL 証明書を構成します。

  6. プロキシー ルール (前のセクションで説明済み) を使って Apache httpd.conf ファイルを変更し、Tomcat の AJP ポートに ArcGIS Web Adaptor 呼び出しをプロキシーします。

    ProxyPass /nbs ajp://myserver.acme.com:8009/nbs
    ProxyPassReverse /nbs ajp://myserver.acme.com:8009/nbs
    
  7. Apache HTTP Server ssl.conf ファイルで、プロキシー ルールを使って Tomcat の AJP ポートに ArcGIS Web Adaptor SSL 呼び出しをプロキシーします。 WebSocket ソケット リクエストが適切に処理されない場合、ArcGIS Notebooks が適切に開かないため、ArcGIS Notebook Server で使用される WebSocket リクエストもプロキシーすることが重要です。

    SSLProxyEngine On
    # Use RewriteEngine to handle WebSocket connection upgrades
    RewriteEngine On
    RewriteCond %{HTTP:Connection} Upgrade [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule /(.*) wss://myserver.acme.com:8443/$1 [P,L]
    <Location "/nbs">
        ProxyPreserveHost On
        ProxyPass ajp://myserver.acme.com:8009/nbs
        ProxyPassReverse ajp://myserver.acme.com:8009/nbs
    </Location>
    
  8. Apache HTTP Server サービスを再起動して構成の変更を適用します。

  9. ArcGIS Notebook Server に ArcGIS Web Adaptor を構成します。