---
schema_version: "1"
id: db8a12b4c9f9e2a0412707d6cafbf51ea453c7d7a55674b34b9be41e336f7702
title: 附录 - 具有 Apache 示例部署的 Web 层
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/guides/enterprise-deployment/edg_part_app-apache.md
canonical_url: https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part_app-apache.htm
source_site: help.tableau.com
content_type: documentation
content_hash: ad065723358f0204c4f4c2dd7fef2521963af2cf24b48141678a08c7389c723a
description: "appendix: deploy the Tableau Server web tier using Apache as a reverse proxy and load balancer."
---
[跳转到主要内容](#main-content)

# 附录 - 具有 Apache 示例部署的 Web 层

**注意**：Tableau 不再更新《Enterprise 部署指南》。尽管我们仍然推荐将此处描述的参考架构作为 AWS 中 Tableau Server 的有效部署模型，但自上次更新以来，特定的配置过程可能已更改。请始终将这些步骤与最新的 [Tableau Server 帮助](https://help.tableau.com/current/server/zh-cn/get_started_server.htm)文档进行交叉引用，以确保准确性。

本主题提供了一个端到端过程，该过程描述了如何在示例 AWS 参考架构中实现 Web 层：示例配置由以下组件组成：

- AWS 应用程序负载平衡器
- Apache 代理服务器
- Mellon 身份验证模块
- Okta IdP
- SAML 身份验证

**注意**：本部分中提供的示例 Web 层配置包括部署第三方软件和服务的详细过程。我们已尽最大努力验证和记录启用 Web 层方案的过程。但是，第三方软件可能会发生变化，或者您的方案可能与此处描述的参考架构不同。请参考第三方文档以获得权威的配置详细信息和支持。

此部分中的 Linux 示例显示了类似 RHEL 的发行版的命令。具体来说，这里的命令是使用 Amazon Linux 2 发行版开发的。如果您运行的是 Ubuntu 发行版，请相应地编辑命令。

在此示例中部署 Web 层遵循逐步配置和验证过程。核心 Web 层配置包含以下用于在 Tableau 和 Internet 之间启用 HTTP 的步骤。Apache 运行并配置为在 AWS 应用程序负载平衡器后面进行反向代理/负载平衡：

1. 安装 Apache
2. 配置反向代理以测试与 Tableau Server 的连接
3. 在代理上配置负载平衡
4. 配置 AWS 应用程序负载平衡器

设置 Web 层并验证与 Tableau 的连接后，使用外部提供程序配置身份验证。

## 安装 Apache

在两个 EC2 主机（代理 1 和代理 2）上运行以下过程。如果您根据参考架构示例在 AWS 中进行部署，那么您应该有两个可用区并在每个可用区中运行单个代理服务器。。

1. 安装 Apache：
    
    sudo yum update -y
    sudo yum install -y httpd
2. 配置在重启时启动 Apache：
    
    sudo systemctl enable --now httpd
3. 验证您安装的 httpd 版本是否包括 `proxy_hcheck_module`：
    
    sudo httpd -M
    
    `proxy_hcheck_module` 为必需。如果您的 httpd 版本不包含此模块，则更新到包含它的 httpd 版本。

## 配置代理以测试与 Tableau Server 的连接

在其中一台代理主机（代理 1）上运行此过程。此步骤的目的是验证 Internet 到您的代理服务器与私有安全组中的 Tableau Server 之间的连接。

1. 创建一个名为 `tableau.conf` 的文件，并将其添加到 `/etc/httpd/conf.d` 目录。
    
    复制以下代码，并使用 Tableau Server 节点 1 的专用 IP 地址指定 `ProxyPass` 和 `ProxyPassReverse` 键。
    
    **重要信息**：下面显示的配置不安全，不应在生产中使用。此配置仅应在安装过程中用于验证端到端连接。
    
    举例来说，如果节点 1 的专用 IP 地址是 `10.0.30.32`，则 `tableau.conf` 文件的内容将为：
    
    <VirtualHost \*:80>
    ProxyPreserveHost On
    ProxyPass "/" "http://10.0.30.32:80/"
    ProxyPassReverse "/" "http://10.0.30.32:80/"
    </VirtualHost>
2. 重启 httpd：
    
    sudo systemctl restart httpd

### 验证：基本拓扑配置

您应该能够通过浏览到 `http://<proxy-public-IP-address>` 来访问 Tableau Server 管理员页面。

如果您的浏览器中未加载 Tableau Server 登录页面，请在代理 1 主机上执行以下故障排除步骤：

- 作为故障排除的第一步，停止然后启动 httpd。
- 仔细检查 `tableau.conf` 文件。验证节点 1 专用 IP 是否正确。验证双引号并仔细检查语法。
- 使用节点 1 专用 IP 地址在反向代理服务器上运行 `curl` 命令，例如 `curl 10.0.1.90`。如果 shell 不返回 html，或者如果返回 Apache 测试网页的 html，请验证“公共”和“专用”安全组之间的协议/端口配置。
- 使用代理 1 专用 IP 地址运行 `curl` 命令，例如 `curl 10.0.0.163`。如果 shell 返回 Apache 测试网页的 html 代码，则说明代理文件配置不正确。
- 在对代理文件或安全组进行任何配置更改之后，请始终停止/启动 httpd (`sudo systemctl restart httpd`)。
- 确保 TSM 在节点 1 上运行。

## 在代理上配置负载平衡

1. 在您创建 `tableau.conf` 文件的同一代理主机（代理 1）上，移除现有的虚拟主机配置，并编辑文件以包含负载平衡逻辑。
    
    例如：
    
    <VirtualHost \*:80>
    ServerAdmin admin@example.com
    #Load balancing logic.
    ProxyHCExpr ok234 {%{REQUEST\_STATUS} =~ /^\[234\]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER\_WORKER\_ROUTE}e; path=/" env=BALANCER\_ROUTE\_CHANGED 
    <Proxy balancer://tableau>
    #Replace IP addresses below with the IP addresses to the Tableau Servers running the Gateway service.
    BalancerMember http://10.0.3.40/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember http://10.0.4.151/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/ 
    </VirtualHost>
2. 停止然后启动 httpd：
    
    sudo systemctl stop httpd
    sudo systemctl start httpd
3. 通过浏览到代理 1 的公共 IP 地址来验证配置。

## 将配置复制到第二个代理服务器

1. 从代理 1 中复制 `tableau.conf` 文件，并将其保存到代理 2 主机上的 `/etc/httpd/conf.d` 目录。
2. 停止然后启动 httpd：
    
    sudo systemctl stop httpd
    sudo systemctl start httpd
3. 通过浏览到代理 2 的公共 IP 地址来验证配置。

## 配置 AWS 应用程序负载平衡器

将负载平衡器配置为 HTTP 侦听器。此处的过程描述了如何在 AWS 中添加负载平衡器。

#### 步骤 1：创建目标组

标组是定义运行代理服务器的 EC2 实例的 AWS 配置。这些是来自 LBS 的流量的目标。

1. “EC2”>“目标组”\>“创建目标组”
2. 在“创建”页面上：
    
    - 输入目标组名称，例如 `TG-internal-HTTP`
    - 目标类型：实例
    - 协议：HTTP
    - 端口：80
    - VPC：选择您的 VPC
    - 在“运行状况检查”\>“高级运行状况检查设置”\>“成功代码”下，将代码列表追加为：`200,303`。
    - 单击“创建”
3. 选择刚刚创建的目标组，然后单击“目标”选项卡： 
    
    - 单击“编辑”。
    - 选择正在运行代理应用程序的 EC2 实例（或单个实例，如果您一次配置一个），然后单击“添加到已注册”。
    - 单击“保存”。

#### 步骤 2：启动负载平衡器向导

1. “EC2”>“负载平衡器”\>“创建负载平衡器”
2. 在“选择负载平衡器类型”页面上，创建一个应用程序负载平衡器。

**注意**：为配置负载均衡器而显示的 UI 在 AWS 数据中心之间不一致。下面的过程“向导配置”映射到从**“步骤 1 配置负载均衡器”**开始的 AWS 配置向导。   
  
如果您的数据中心在页面底部包含**“创建负载均衡器”**按钮的单个页面中显示所有配置，请按照下面的“单页面配置”过程进行操作。

1. “配置负载平衡器”页面：
    
    - 指定名称
    - 方案：面向互联网（默认）
    - IP 地址类型：ip1v4（默认）
    - 侦听器（侦听器和路由）：
        1. 保留默认的 HTTP 侦听器
        2. 单击“添加侦听器”并添加 `HTTPS:443`
    
    - VPC：选择您已安装所有内容的 VPC
    - 可用区：
        - 为您的数据中心区域选择 **a** 和 **b**
        - 在每个相应的下拉选择器中，选择 Public 子网（您的代理服务器所在的位置）。
    - 单击：“配置安全设置”
2. “配置安全设置”页面
    
    - 上载您的公共 SSL 证书。
    - 单击“下一步：配置安全组”。
3. “配置安全组”页面：
    
    - 选择 Public 安全组。如果选择了“默认”安全组，则清除该选择。
    - 单击“下一步：配置路由”。
4. “配置路由”页面
    
    - 目标组：现有目标组。
    - 名称：选择您之前创建的目标组
    - 单击“下一步：注册目标”。
5. “注册目标”页面
    
    - 应会显示您之前配置的两个代理服务器实例。
    - 单击“下一步：审查”。
6. “查看”页面
    
    单击“创建”。

基本配置

- 指定名称
- 方案：面向互联网（默认）
- IP 地址类型：ip1v4（默认）

网络映射

- VPC：选择您已安装所有内容的 VPC
- 映射：
    - 为您的数据中心区域选择 **a** 和 **b**（或类似的）可用区
    - 在每个相应的下拉选择器中，选择 Public 子网（您的代理服务器所在的位置）。

安全组

- 选择 Public 安全组。如果选择了“默认”安全组，则清除该选择。

侦听器和路由

- 保留默认的 HTTP 侦听器。对于“默认操作”，指定您之前设置的目标组。
- 单击“添加侦听器”并添加 `HTTPS:443`。对于“默认操作”，指定您之前设置的目标组。

安全侦听器设置

- 上载您的公共 SSL 证书。

单击“创建负载平衡器”。

#### 步骤 3：启用粘性

1. 创建负载平衡器后，您必须在目标组上启用粘性。
    
    - 打开 AWS 目标组页面（“EC2”\>“负载平衡”\>“目标组”），选择您刚刚设置的目标组实例。在“操作”菜单上，选择“编辑属性”。
    - 在“编辑属性”页面上，选择“粘性” ，指定持续时间 `1 day`，然后保存更改。
2. 在负载平衡器上，在 HTTP 侦听器上启用粘性。选择您刚刚配置的负载平衡器，然后单击“侦听器”选项卡：
    
    - 对于“HTTP:80”，单击“查看/编辑规则”。在生成的“规则”页面上，单击编辑图标（一次位于页面顶部，然后再次位于规则旁边）以编辑规则。删除现有 THEN 规则，并通过单击“添加操作”\>“转发至...”替换该规则。在生成的 THEN 配置中，指定您创建的相同目标组。在“组级粘性”下，启用粘性并将持续时间设置为 1 天。保存设置，然后单击“更新”。

#### 步骤 4：在负载平衡器上设置空闲超时

在负载平衡器上，将空闲超时更新为 400 秒。

选择您为此部署配置的负载平衡器，然后单击“操作”\>“编辑属性”。将“空闲超时”设置为 `400` 秒，然后单击“保存”。

#### 步骤 5：验证 LBS 连接

打开 AWS 负载平衡器页面（“EC2”\>“负载平衡器”），选择您刚刚设置的负载平衡器实例。

在“描述”下，复制 DNS 名称并将其粘贴到浏览器中以访问 Tableau Server 登录页面。

如果您收到 500 级错误，那么您可能需要重新启动代理服务器。

## 使用公共 Tableau URL 更新 DNS

使用 AWS 负载平衡器描述中的域 DNS 区域名称在您的 DNS 中创建 CNAME 值。流向您的 URL (tableau.example.com) 的流量应发送到 AWS 公共 DNS 名称。

## 验证连接

DNS 更新完成后，您应该能够通过输入您的公共 URL（例如 `https://tableau.example.com`）导航到 Tableau Server 登录页面。

## 示例身份验证配置：带有外部 IdP 的 SAML

以下示例介绍如何使用 Okta IdP 和 Mellon 身份验证模块为在 AWS 参考架构中运行的 Tableau 部署设置和配置 SAML。该示例介绍了如何配置 Tableau Server 和 Apache 代理服务器以使用 HTTP。Okta 将通过 HTTPS 向 AWS 负载平衡器发送请求，但所有内部流量都将通过 HTTP 传输。针对此场景进行配置时，请在设置 URL 字符串时注意 HTTP 与 HTTPS 协议。

此示例使用 Mellon 作为反向代理服务器上的预身份验证服务提供程序模块。此配置可确保只有经过身份验证的流量连接到 Tableau Server，Tableau Server 还充当 Okta IdP 的服务提供商。因此，您必须配置两个 IdP 应用程序：一个用于 Mellon 服务提供商，另一个用于 Tableau 服务提供商。

### 创建 Tableau 管理员帐户

配置 SAML 时的一个常见错误是在启用 SSO 之前忘记在 Tableau Server 上创建管理员帐户。

第一步是在 Tableau Server 上创建一个具有服务器管理员角色的帐户。对于示例 Okta 场景，用户名必须采用有效电子邮件地址格式，例如 user@example.com。您必须为此用户设置密码，但在配置 SAML 后将不再使用该密码。

### 配置 Okta 预身份验证应用程序

本部分描述的端到端场景需要两个 Okta 应用程序：

- Okta 预认证应用程序
- Okta Tableau Server 应用程序

这些应用程序中的每一个都与您需要分别在反向代理和 Tableau Server 上配置的不同元数据相关联。

此过程描述了如何创建和配置 Okta 预身份验证应用程序。在本主题的后面，您将创建 Okta Tableau Server 应用程序。有关用户受限的免费测试 Okta 帐户，请参见 [Okta 开发人员网页](https://developer.okta.com/signup/)。

为 Mellon 预身份验证服务提供商创建 SAML 应用程序集成。

1. 打开 Okta 管理仪表板 >“应用程序”\>“创建应用程序集成”。
2. 在“创建新的应用程序集成”页面上，选择“SAML 2.0”，然后单击“下一步”。
3. 在“常规设置”选项卡上，输入应用程序名称（例如 `Tableau Pre-Auth`），然后单击“下一步”。
4. 在“配置 SAML”选项卡上：
    
    - 单点登录 (SSO) URL。单点登录 URL 中路径的最后一个元素在 `mellon.conf` 配置文件称为 `MellonEndpointPath` ，该配置文件将在本过程的后面进行介绍。您可以指定您想要的任何端点。在此示例中，`sso` 是端点。最后一个元素 `postResponse` 是必须的：`https://tableau.example.com/sso/postResponse`。
    - 清除复选框：“将此用于收件人 URL 和目标 URL”。
    - 收件人 URL：与 SSO URL 相同，但使用 HTTP。例如，`http://tableau.example.com/sso/postResponse`。
    - 目标 URL：与 SSO URL 相同，但带有 HTTP。例如，`http://tableau.example.com/sso/postResponse`。
    - 受众 URI（SP 实体 ID）。例如，`https://tableau.example.com`。
    - 名称 ID 格式：`EmailAddress`
    - 应用程序用户名：`Email`
    - 属性声明：名称 = `mail`；名称格式 = `Unspecified`；值 = `user.email`。
    
    单击“下一步”。
5. 在“反馈”选项卡上，选择：
    
    - 我是添加内部应用程序的 Okta 客户
    - 这是我们创建的内部应用程序
    - 单击“完成”。
6. 创建预授权 IdP 元数据文件：
    
    - 在 Okta 中：“Applications”（应用程序）\>“Applications”（应用程序）\> 您的新应用程序（例如，`Tableau Pre-Auth`）>“Sign On”（登录）
    - 在“SAML 签名证书”旁边，单击“查看 SAML 设置说明”。
    - 在“如何针对 <预授权> 应用程序配置 SAML 2.0”页面上，向下滚动到“可选”部分，向您的 SP 提供商提供以下 IDP 元数据。
    - 复制 XML 字段的内容并将它们保存在一个名为 `pre-auth_idp_metadata.xml` 的文件中。
7. （可选）配置多重身份验证：
    
    - 在 Okta 中：“Applications”（应用程序）\>“Applications”（应用程序）\> 您的新应用程序（例如，`Tableau Pre-Auth`）>“Sign On”（登录）
    - 在“Sign On Policy”（登录策略）下，单击“Add Rule”（添加规则）。
    - 在“App Sign On Rule”（应用程序登录规则）上，指定名称和不同的 MFA 选项。若要测试功能，您可以将所有选项保留为默认值。但是，在“Actions”（操作）下，您必须选择“Prompt for factor”（因素提示），然后指定用户必须登录的频率。单击“Save”（保存）。

### 创建和分配 Okta 用户

1. 在 Okta 中，使用您在 Tableau 中创建的相同用户名 (user@example.com) 创建一个用户：“Directory”（目录）\>“People”（人员）\>“Add person”（添加人员）。
2. 创建用户后，将新的 Okta 应用程序分配给该人员：单击用户名，然后在“Assign Application”（分配应用程序）中分配应用程序。

## 安装 Mellon 进行预身份验证

1. 在运行 Apache 代理服务器的 EC2 实例上，运行以下命令以安装 PHP 和 Mellon 模块：
    
    sudo yum install httpd php mod\_auth\_mellon
2. 创建 `/etc/httpd/mellon` 目录

## 将 Mellon 配置为预身份验证模块

在两个代理服务器上运行此过程。

您必须有依据 Okta 配置创建的 `pre-auth_idp_metadata.xml` 文件的副本。

1. 更改目录：
    
    cd /etc/httpd/mellon
2. 创建服务提供程序元数据。运行 `mellon_create_metadata.sh` 脚本。您必须在命令中包含您组织的实体 ID 和返回 URL。
    
    返回 URL 在 Okta 中称为_单点登录 URL_。返回 URL 中路径的最后一个元素在 `mellon.conf` 配置文件中称为 `MellonEndpointPath`，该配置文件将在本过程的后面进行介绍。在此示例中，我们指定 `sso` 作为端点路径。
    
    例如：
    
    sudo /usr/libexec/mod\_auth\_mellon/mellon\_create\_metadata.sh https://tableau.example.com "https://tableau.example.com/sso"
    
    该脚本返回服务提供商证书、密钥和元数据文件。
3. 重命名 `mellon` 目录中的服务提供商文件以便于阅读。我们将在文档中使用以下名称来引用这些文件：
    
    sudo mv \*.key mellon.key  
    sudo mv \*.cert mellon.cert  
    sudo mv \*.xml sp\_metadata.xml
4. 将 `pre-auth_idp_metadata.xml` 文件复制到同一文件夹。
5. 在 `/etc/httpd/conf.d` 目录中创建 `mellon.conf` 文件：
    
    sudo nano /etc/httpd/conf.d/mellon.conf
6. 将以下内容复制到 `mellon.conf` 中。
    
    <Location />
    MellonSPPrivateKeyFile /etc/httpd/mellon/mellon.key
    MellonSPCertFile /etc/httpd/mellon/mellon.cert
    MellonSPMetadataFile /etc/httpd/mellon/sp\_metadata.xml
    MellonIdPMetadataFile /etc/httpd/mellon/pre-auth\_idp\_metadata.xml
    MellonEndpointPath /sso
    MellonEnable "info"
    </Location>
7. 将以下内容添加到现有 `tableau.conf` 文件中：
    
    在 `<VirtualHost *:80>` 块内部，添加以下内容。使用实体 ID 中的公共主机名更新 `ServerName` ：
    
    DocumentRoot /var/www/html
    ServerName tableau.example.com
    ServerSignature Off
    ErrorLog logs/error\_sp.log
    CustomLog logs/access\_sp.log combined
    LogLevel info 
    
    在 `<VirtualHost *:80>` 块外部添加 Location 块。使用顶级域更新 `MellonCookieDomain` 以保存 Cookie 信息，如下所示：
    
    <Location />
    AuthType Mellon
    MellonEnable auth
    Require valid-user
    MellonCookieDomain example.com					
    </Location>
    
    完整的 `tableau.conf` 文件看起来应类似于以下示例：
    
    <VirtualHost \*:80>
    ServerAdmin admin@example.com
    ProxyHCExpr ok234 {%{REQUEST\_STATUS} =~ /^\[234\]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER\_WORKER\_ROUTE}e; path=/" env=BALANCER\_ROUTE\_CHANGED
    <Proxy balancer://tableau>
    BalancerMember http://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember http://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/
    DocumentRoot /var/www/html
    ServerName tableau.example.com
    ServerSignature Off
    ErrorLog logs/error\_sp.log
    CustomLog logs/access\_sp.log combined
    LogLevel info 
    </VirtualHost>
    <Location />
    AuthType Mellon
    MellonEnable auth
    Require valid-user
    MellonCookieDomain example.com
    </Location>
8. 验证配置。运行以下命令：
    
    sudo apachectl configtest
    
    如果配置测试返回错误，请修复所有错误并再次运行 configtest。一个成功的配置将返回，`Syntax OK` 。
9. 重启 httpd：
    
    sudo systemctl restart httpd

## 在 Okta 中创建 Tableau Server 应用程序

1. 在 Okta 仪表板中：“Applications”（应用程序）\>“Applications”（应用程序）\>“Browse App Catalog”（浏览应用程序目录）
2. 在“Browse App Integration Catalog”（浏览应用程序集成目录）中，搜索 `Tableau`，选择“Tableau Server”磁贴，然后单击“Add”（添加）。
3. 在“Add Tableau Server”（添加 Tableau Server） >“General Settings”（常规设置）”上，输入标签，然后单击“Next”（下一步）。
4. 在“Sign-On Options”（登录选项）中，选择“SAML 2.0”，然后向下滚动到“Advanced Sign-on Settings”（高级登录设置）：
    - “SAML Entity ID”（SAML 实体 ID）：输入公共 URL，例如 https://tableau.example.com。
    - “Application user name format”（应用程序用户名格式）：“Email”（电子邮件）
5. 单击“Identity Provider metadata”（身份提供程序元数据）链接以启动浏览器。复制浏览器链接。这是您在以下过程中配置 Tableau 时将使用的链接。
6. 单击“Done”（完成）。
7. 将新的 Tableau Server Okta 应用程序分配给您的用户 (user@example.com)：单击用户名，然后在“Assign Application”（分配应用程序）中分配应用程序。

### 在 Tableau Server 上为 IdP 启用 SAML

在 Tableau Server 节点 1 上运行此过程。

1. 从 Okta 下载 Tableau Server 应用程序元数据。使用您在上一过程中保存的链接：
    
    wget https://dev-66144217.okta.com/app/exk1egxgt1fhjkSeS5d7/sso/saml/metadata -O idp\_metadata.xml
2. 将 TLS 证书和相关密钥文件复制到 Tableau Server。密钥文件必须是 RSA 密钥。有关 SAML 证书和 IdP 要求的详细信息，请参见“_SAML 要求_ ([Linux](https://help.tableau.com/current/server-linux/zh-cn/saml_requ.htm))”。
    
    为了简化证书管理和部署，以及作为安全最佳实践，我们建议使用由主要受信任的第三方证书颁发机构 (CA) 生成的证书。或者，您可以为 TLS 生成自签名证书或使用 PKI 中的证书。
    
    如果您没有 TLS 证书，则可以使用下面的嵌入式过程生成自签名证书。
    
    生成自签名证书
    
    在 Tableau Server 节点 1 上运行此过程。
    
    1. 生成签名根证书颁发机构 (CA) 密钥：
        
        openssl genrsa -out rootCAKey-saml.pem 2048
    2. 创建根 CA 证书：
        
        openssl req -x509 -sha256 -new -nodes -key rootCAKey-saml.pem -days 3650 -out rootCACert-saml.pem
        
        系统将提示您输入证书字段的值。例如：
        
        Country Name (2 letter code) \[XX\]:US
        State or Province Name (full name) \[\]:Washington
        Locality Name (eg, city) \[Default City\]:Seattle
        Organization Name (eg, company) \[Default Company Ltd\]:Tableau
        Organizational Unit Name (eg, section) \[\]:Operations
        Common Name (eg, your name or your server's hostname) \[\]:tableau.example.com
        Email Address \[\]:example@tableau.com
    3. 创建证书和相关密钥（在下面的示例中为 `server-saml.csr` 和 `server-saml.key`）。证书的使用者名称必须与 Tableau 主机的公共主机名称匹配。使用者名称是使用 `-subj` 选项以`"/CN=<host-name>"` 格式设置的，例如：
        
        openssl req -new -nodes -text -out server-saml.csr -keyout server-saml.key -subj "/CN=tableau.example.com"
    4. 使用您在上面创建的 CA 证书签署新证书。以下命令还将以 `crt` 格式输出证书：
        
        openssl x509 -req -in server-saml.csr -days 3650 -CA rootCACert-saml.pem -CAkey rootCAKey-saml.pem -CAcreateserial -out server-saml.crt
    5. 将密钥文件转换为 RSA。Tableau 需要用于 SAML 的 RSA 密钥文件。若要转换密钥，请运行以下命令：
        
        openssl rsa -in server-saml.key -out server-saml-rsa.key
3. 配置 SAML。运行以下命令，指定您的实体 ID 和返回 URL，以及元数据文件、证书文件和密钥文件的路径：
    
    tsm authentication saml configure --idp-entity-id "https://tableau.example.com" --idp-return-url "https://tableau.example.com" --idp-metadata idp\_metadata.xml --cert-file "server-saml.crt" --key-file "server-saml-rsa.key"
    
    tsm authentication saml enable
4. 如果您的组织运行的是 Tableau Desktop 2021.4 或更高版本，则您必须运行以下命令以通过反向代理服务器启用身份验证。
    
    Tableau Desktop 2021.2.1 - 2021.3 的版本无需运行此命令也可工作，前提是您的预身份验证模块（例如 Mellon）配置为允许保留顶级域 Cookie。
    
    tsm configuration set -k features.ExternalBrowserOAuth -v false
5. 应用配置更改：
    
    tsm pending-changes apply

## 验证 SAML 功能

若要验证端到端 SAML 功能，请使用您在此过程开始时创建的 Tableau 管理员帐户通过公共 URL（例如 https://tableau.example.com）登录到 Tableau Server。

## 验证故障排除

**错误请求**：这种情况下的一个常见错误是来自 Okta 的“错误请求”错误。当浏览器缓存来自先前 Okta 会话的数据时，通常会发生此问题。举例来说，如果您以 Okta 管理员身份管理 Okta 应用程序，然后尝试使用不同的启用 Okta 的帐户访问 Tableau，则来自管理员数据的会话数据可能会导致“错误请求”错误。如果即使在您清除本地浏览器缓存后此错误仍然存在，请尝试通过连接其他浏览器来验证 Tableau 方案。

“错误请求”错误的另一个原因是您在 Okta、Mellon 和 SAML 配置过程中输入的许多 URL 之一中的拼写错误。仔细检查所有这些 URL。

通常是 Apache 服务器上的 httpd `error.log` 文件将指定导致错误的 URL。

**未找到 - 在此服务器上找不到请求的 URL**：此错误表示许多配置错误之一。

如果用户使用 Okta 进行身份验证，然后收到此错误，则很可能是您在配置 SAML 时将 Okta 预身份验证应用程序上载到 Tableau Server。验证您是否在 Tableau Server 上配置了 Okta Tableau Server 应用程序元数据，而不是 Okta 预身份验证应用程序元数据

其他疑难解答步骤：

- 仔细检查 `tableau.conf` 中是否有拼写错误或配置错误
- 查看 Okta 预身份验证应用程序设置。确保按照本主题中指定的方式设置 HTTP 与 HTTPS 协议。
- 在两个代理服务器上重新启动 httpd。
- 验证 `sudo apachectl configtest` 在两个代理服务器上是否都返回“Syntax OK”。
- 验证测试用户是否已分配给 Okta 中的两个应用程序。
- 验证是否在负载平衡器和关联的目标组上设置了粘性

## 配置从负载平衡器到 Tableau Server 的 SSL/TLS

一些组织需要从客户端到后端服务的端到端加密通道。到目前为止所描述的默认参考架构指定了从客户端到在您组织的 Web 层中运行的负载均衡器的 SSL。

若要配置从从负载平衡器到 Tableau Server 的 SSL，您必须：

- 在 Tableau 和代理服务器上安装有效的 SSL 证书。
- 配置从负载平衡器到反向代理服务器的 SSL。
- 配置从代理服务器到 Tableau Server 的 SSL。
- 您还可以配置从 Tableau Server 到 PostgreSQL 实例的 SSL。

本主题的其余部分在示例 AWS 示例参考架构的上下文中描述了此实现。

## 示例：在 AWS 参考架构中配置 SSL/TLS

本节介绍如何在 Tableau 上配置 SSL 以及在 Apache 代理服务器上配置 SSL这些都在示例 AWS 参考架构中运行。

此示例中的 Linux 程序显示了类似 RHEL 的发行版的命令。具体来说，这里的命令是使用 Amazon Linux 2 发行版开发的。如果您运行的是 Ubuntu 发行版，请相应地编辑命令。

### 步骤 1：收集证书和相关密钥

为了简化证书管理和部署，以及作为安全最佳实践，我们建议使用由主要受信任的第三方证书颁发机构 (CA) 生成的证书。

或者，您可以为 TLS 生成自签名证书或使用 PKI 中的证书。

以下过程描述如何生成自签名证书。如果您按照我们的建议使用第三方证书，则可以跳过此过程。

在代理主机之一上运行此过程。生成证书和关联的密钥后，您将与其他代理主机和 Tableau Server 节点 1 共享它。

1. 生成签名根证书颁发机构 (CA) 密钥：
    
    `openssl genrsa -out rootCAKey.pem 2048`
2. 创建根 CA 证书：
    
    `openssl req -x509 -sha256 -new -nodes -key rootCAKey.pem -days 3650 -out rootCACert.pem`
    
    系统将提示您输入证书字段的值。例如：
    
    Country Name (2 letter code) \[XX\]:US
    State or Province Name (full name) \[\]:Washington
    Locality Name (eg, city) \[Default City\]:Seattle
    Organization Name (eg, company) \[Default Company Ltd\]:Tableau
    Organizational Unit Name (eg, section) \[\]:Operations
    Common Name (eg, your name or your server's hostname) \[\]:tableau.example.com
    Email Address \[\]:example@tableau.com
3. 创建证书和相关密钥（在下面的示例中为 `serverssl.csr` 和 `serverssl.key`）。证书的使用者名称必须与 Tableau 主机的公共主机名称匹配。使用者名称是使用 `-subj` 选项以`"/CN=<host-name>"` 格式设置的，例如：
    
    `openssl req -new -nodes -text -out serverssl.csr -keyout serverssl.key -subj "/CN=tableau.example.com"`
4. 使用您在步骤 2 中创建的 CA 证书签署新证书。以下命令还将以 `crt` 格式输出证书：
    
    `openssl x509 -req -in serverssl.csr -days 3650 -CA rootCACert.pem -CAkey rootCAKey.pem -CAcreateserial -out serverssl.crt`

### 步骤 2：为 SSL 配置代理服务器

在两个代理服务器上运行此过程。

1. 安装 Apache ssl 模块：
    
    `sudo yum install mod_ssl`
2. 创建 `/etc/ssl/private` 目录：
    
    `sudo mkdir -p /etc/ssl/private`
3. 将 crt 和 key 文件复制到以下 `/etc/ssl/` 路径：
    
    `sudo cp serverssl.crt /etc/ssl/certs/`
    
    `sudo cp serverssl.key /etc/ssl/private/`
4. 使用以下更新对现有 `tableau.conf` 进行更新：
    
    - 添加 SSL 重写块：
        
        RewriteEngine on
        RewriteCond %{SERVER\_NAME} =tableau.example.com
        RewriteRule ^ https://%{SERVER\_NAME}%{REQUEST\_URI} \[END,NE,R=permanent\]
    - 在 SSL 重写块中，更新 `RewriteCond` 服务器名称：添加您的公共主机名，例如，`tableau.example.com`
    - 将 `<VirtualHost *:80>` 更改为 `<VirtualHost *:443>`。
    - 使用以下内容封装 `<VirtualHost *:443>` 和 `<Location />` 块： `<IfModule mod_ssl.c>` ...`</IfModule>`。
    - `BalancerMember`: 将协议从 `http` 更改为 `https`。
    - 在 `<VirtualHost *:443>` 块内添加 `SSL*` 元素：
        
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/serverssl.crt
        SSLCertificateKeyFile /etc/ssl/private/serverssl.key
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
    - 在 `LogLevel` 元素中：添加 `ssl:warn`。
    - 可选：如果您已安装并配置了身份验证模块，则 tableau.conf 文件中可能包含其他元素。例如， `<Location /> </Location>` 块将包含元素。
    
    此处显示了针对 SSL 配置的示例 tableau.conf 文件：
    
    RewriteEngine on
    RewriteCond %{SERVER\_NAME} =tableau.example.com
    RewriteRule ^ https://%{SERVER\_NAME}%{REQUEST\_URI} \[END,NE,R=permanent\]
    
    <IfModule mod\_ssl.c>
    <VirtualHost \*:443>
    ServerAdmin admin@example.com
    ProxyHCExpr ok234 {%{REQUEST\_STATUS} =~ /^\[234\]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER\_WORKER\_ROUTE}e; path=/" env=BALANCER\_ROUTE\_CHANGED
    <Proxy balancer://tableau>
    BalancerMember https://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember https://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/
    DocumentRoot /var/www/html
    ServerName tableau.example.com
    ServerSignature Off
    ErrorLog logs/error\_sp.log
    CustomLog logs/access\_sp.log combined
    LogLevel info ssl:warn
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/serverssl.crt
    SSLCertificateKeyFile /etc/ssl/private/serverssl.key
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    </VirtualHost>
    <Location />
    #If you have configured a pre-auth module (e.g. Mellon) include those elements here.
    </Location>
    </IfModule>
5. 添加 index.html 文件以抑制 403 错误：
    
    sudo touch /var/www/html/index.html
6. 重启 httpd：
    
    sudo systemctl restart httpd

### 步骤 3：为外部 SSL 配置 Tableau Server

将 serverssl.crt 和 serverssl.key 文件从代理 1 主机复制到初始 Tableau Server（节点 1）。

在节点 1 上运行以下命令：

tsm security external-ssl enable --cert-file serverssl.crt --key-file serverssl.key
tsm pending-changes apply

### 步骤 4：可选身份验证配置

如果您为 Tableau 配置了外部身份提供程序，则您可能需要更新 IdP 管理仪表板中的返回 URL。

举例来说，如果您使用 Okta 预身份验证应用程序，您将需要更新应用程序以对收件人 URL 和目标 URL 使用 HTTPS 协议。

### 步骤 5：为 HTTPS 配置 AWS 负载平衡器

如果您按照本指南中的说明使用 AWS 负载平衡器进行部署，那么您可以重新配置 AWS 负载平衡器以将 HTTPS 流量发送到代理服务器：

1. 取消注册现有 HTTP 目标组：
    
    在“目标组”中，选择已为负载平衡器配置的 HTTP 目标组，单击“操作”，然后单击“注册和注销实例”。
    
    在“注册和注销目标”页面上，选择当前配置的实例，单击“注销”，然后单击“保存”。
2. 创建 HTTPS 目标组
    
    “目标组”\>“创建目标组”
    
    - 选择“实例”
    - 输入目标组名称，例如 `TG-internal-HTTPS`
    - 选择您的 VPC
    - 协议：HTTPS 443
    - 在“运行状况检查”\>“高级运行状况检查设置”\>“成功代码”下，将代码列表追加为：`200,303`。
    - 单击“创建”。
3. 选择刚刚创建的目标组，然后单击“目标”选项卡： 
    
    - 单击“编辑”
    - 选择正在运行代理应用程序的 EC2 实例，然后单击“添加到已注册”。
    - 单击“保存”。
4. 创建目标组后，您必须启用粘性：
    
    - 打开 AWS 目标组页面（“EC2”\>“负载平衡”\>“目标组”），选择您刚刚设置的目标组实例。在“操作”菜单上，选择“编辑属性”。
    - 在“编辑属性”页面上，选择“粘性” ，指定持续时间 `1 day`，然后保存更改。
5. 在负载平衡器上，更新侦听器规则。选择您为此部署配置的负载平衡器，然后单击“侦听器”选项卡。
    
    - 对于“HTTP:80”，单击“查看/编辑规则”。在生成的“规则”页面上，单击编辑图标（一次位于页面顶部，然后再次位于规则旁边）以编辑规则。删除现有 THEN 规则，并通过单击“添加操作”\>“重定向至...”替换该规则。在生成的 THEN 配置中，指定 `HTTPS` 和端口 `443`，并将其他选项保留为默认设置。保存设置，然后单击“更新”。
    - 对于“HTTP:443”，单击“查看/编辑规则”。在生成的“规则”页面上，单击编辑图标（一次位于页面顶部，然后再次位于规则旁边）以编辑规则。在“THEN”配置中的“转发到...”下，将目标组更改为您刚刚创建的 HTTPS 组。在“组级粘性”下，启用粘性并将持续时间设置为 1 天。保存设置，然后单击“更新”。

#### 步骤 6：验证 SSL

通过浏览到 https://tableau.example.com 来验证配置。