反向代理服务器是在外围网络(也称为隔离区 [DMZ] 或屏蔽子网)中部署的计算机,可处理来自 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 Server 的 WebContextURL 属性。 这有助于 ArcGIS Notebook Server 在发送给最终用户所有资源上构造的正确 URL。
注:
使用 WebContextURL 属性将 ArcGIS Notebook Server URL 设置为与其 ArcGIS Web Adaptor 的 URL 匹配(例如 /notebook)。
- 以具有管理员权限的用户身份登录至 ArcGIS Notebook Server Administrator Directory (https://notebookserver.domain.com:11443/arcgis/admin)。
- 单击系统 > 属性 > 更新。
- 在属性文本框中,插入以下 JSON,将您自己的 ArcGIS Notebook Server URL 替换为所在组织防火墙以外的用户所看到的 URL。
{ "WebContextURL": "https://notebookserver.domain.com/notebook" }
- 单击更新。
- 重新启动 ArcGIS Notebook Server。 在 Linus 中,执行安装文件夹中的 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 服务目录 (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 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 服务器上,但尚未配置时,可以开始执行以下步骤。
- 安装 Tomcat 以使用 Apache JServ Protocol (AJP) 在端口 8080 运行,该端口默认已启用。
- 由于默认情况下,在 Tomcat 上未启用端口 8443,请启用 SSL 或为端口 8443 添加连接器。
此操作涉及生成 SSL 证书和编辑 Tomcat 配置文件以添加连接器。 作为实现安全性最佳做法,仅应该启用 TLS 1.2 版本。
... sslProtocol="TLS" SSLProtocol="TLSv1.2" ...
- 将现有 ArcGIS Web Adaptor (Java Platform) 的 arcgis.war 文件部署到 Tomcat。
对于此示例,ArcGIS Web Adaptor URL 为 /nbs。
- 安装 Apache HTTP Server 。
对于此示例,已使用 yum 包管理器。 同时使用 yum 安装了 SSL 功能。
yum install httpd -y yum install mod_ssl -y
- 在 ssl.conf 文件中配置 Apache HTTP Server 的 SSL 证书。
- 使用代理规则将 Apache httpd.conf 文件(如上一部分所述)修改为代理 ArcGIS Web Adaptor 调用 Tomcat AJP 端口。
ProxyPass /nbs ajp://myserver.acme.com:8009/nbs ProxyPassReverse /nbs ajp://myserver.acme.com:8009/nbs
- 在 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>
- 重新启动 Apache HTTP Server 服务,以使配置生效。
- 使用 ArcGIS Notebook Server 配置 ArcGIS Web Adaptor