Skip To Content

使用 ArcGIS Notebook Server 设置反向代理服务器

反向代理服务器是在外围网络(也称为隔离区或屏蔽子网)中部署的计算机,可处理来自 Internet 的请求并将其转发到内部网络的计算机中。 通过转发请求,反向代理服务器会为组织防火墙后面的计算机标识进行掩膜,从而保护内部计算机,使其免受 Internet 用户的直接攻击。 可以在反向代理服务器中实施其他安全功能,以进一步保护内部网络,以防外部用户访问。

您可以配置 ArcGIS Notebook Server 站点以使用组织的反向代理服务器。 此操作是可选的。 如果您的组织尚未使用反向代理服务器,或者您不想配置 ArcGIS Notebook Server 站点使用反向代理服务器,则可以使用门户配置站点

ArcGIS Notebook Server 添加至反向代理服务器

您的组织的反向代理服务器必须配置为通过向代理目录添加相应 URL 的方法与 ArcGIS Web Adaptor 进行通信。

例如,如果您正在使用 Apache 作为反向代理服务器,则需要将 ArcGIS Web Adaptor URL 添加到 Apache Web 服务器配置文件 httpd.conf 中的以下 ProxyPass 指令中:

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

大多数反向代理服务器都具有可配置的客户端连接超时。 当达到连接超时时,ArcGIS Notebook Server 用于与 Python 核通信的 websocket 连接将断开,并且笔记本中将出现通知。 如果这种情况以一致的时间间隔发生,例如在重新连接到核后的每 1、3 或 5 分钟发生一次,则应调查网络路径的连接超时并相应地增加超时。

设置 WebContextURL 属性

如果您正在使用反向代理服务器,而您站点的 URL 并非以默认字符串 /arcgis(全部小写)结尾,则还应设置 ArcGIS Notebook ServerWebContextURL 属性。 这有助于 ArcGIS Notebook Server 在发送给最终用户所有资源上构造的正确 URL。

注:

使用 WebContextURL 属性将 ArcGIS Notebook Server URL 设置为与其 ArcGIS Web Adaptor 的 URL 匹配(例如 /notebook)。

要更改 WebContextURL 属性,请完成以下步骤:

  1. 以具有管理员权限的用户身份登录至 ArcGIS Notebook Server Administrator Directory (https://notebookserver.domain.com:11443/arcgis/admin)。
  2. 单击系统 > 属性 > 更新
  3. 属性文本框中,插入以下 JSON,将您自己的 ArcGIS Notebook Server URL 替换为所在组织防火墙以外的用户所看到的 URL。
    {
       "WebContextURL": "https://notebookserver.domain.com/notebook"
    }
  4. 单击更新
  5. 重新启动 ArcGIS Notebook ServerLinux 中,执行安装文件夹中的 stopnotebookserver.shstartnotebookserver.sh 脚本。

反向代理标题和 ArcGIS Notebook Server

将反向代理与 ArcGIS Web Adaptor 集成时,反向代理服务器发送的标题中必须设置以下属性:

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

如果在标题中设置该属性,ArcGIS Web Adaptor 会将请求返回到与反向代理服务器的 URL 相匹配的反向代理服务器。 例如,对 ArcGIS Notebook Server 服务目录 (https://reverseproxy.domain.com/arcgis/rest/services) 的请求会以相同的 URL 返回到客户端。

如果未设置 X-Forwarded-Host 标题属性,则 ArcGIS Web Adaptor 可能会返回请求已定向的内部计算机的 URL,例如 https://notebookserver.domain.com/arcgis/rest/services,而不是 https://reverseproxy.domain.com/arcgis/rest/services。 这会带来问题,因为客户端将无法访问 URL(通常称为浏览器 404 错误)。 而且,客户端将获得有关内部计算机的一些信息。

在排除客户端与 ArcGIS Web Adaptor 之间的通信故障时,建议您在反向代理服务器中设置 X-Forwarded-Host 标题属性,因为这是导致通信失败的常见原因。 设置该标题的方式取决于您的反向代理服务器实现。

有关如何通过原始托管标题的指导信息,请参阅反向代理服务器的产品文档。

为高可用性 ArcGIS Notebook Server 站点配置反向代理服务器

在实现具有多个注册到单个 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>

将安全 websocket (WSS) 连接代理到相同的后端目标也十分重要:

<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

您可以通过 ArcGIS Notebook Server 使用任意 web 服务器软件配置反向代理。 以下示例工作流介绍了使用 Apache HTTP ServerApache 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 ServerApache HTTP ServerApache Tomcat 均位于单独的计算机上。

安装并配置 ArcGIS Notebook Server Mirantis Container Runtime 后,且 ArcGIS Web Adaptor 实例已安装在 Java web 服务器上,但尚未配置时,可以开始执行以下步骤。

  1. 安装 Tomcat 以使用 Apache JServ Protocol (AJP) 在端口 8080 运行,该端口默认已启用。
  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 文件(如上一部分所述)修改为代理 ArcGIS Web Adaptor 调用 Tomcat AJP 端口。

    ProxyPass /nbs ajp://myserver.acme.com:8009/nbs
    ProxyPassReverse /nbs ajp://myserver.acme.com:8009/nbs

  7. Apache HTTP Server ssl.conf 文件中,将代理规则用于代理 ArcGIS Web Adaptor SSL 调用 Tomcat 的 AJP 端口。 这对代理 WebSocket 请求十分重要,ArcGIS Notebook Server 将使用此设置,如果 WebSocket 请求未正确处理,ArcGIS Notebooks 将无法正常打开。

    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