Skip to main 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 连接将断开,并且 notebook 中将出现通知。 如果这种情况以一致的时间间隔发生,例如在重新连接到核后的每 1、3 或 5 分钟发生一次,则应调查网络路径的连接超时并相应地增加超时。

设置 WebContextURL 属性

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

注:

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

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

  1. 以具有管理员权限的用户在 https://notebookserver.domain.com:11443/arcgis/admin 登录 ArcGIS Notebook Server Administrator Directory。

  2. 单击系统 > 属性 > 更新

  3. 属性文本框中,插入以下 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.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

您可以使用任意 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. 安装 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 端口。 同时,代理 ArcGIS Notebook Server 使用的 WebSocket 请求也十分重要,如果未正确处理 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