

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用网络负载均衡器
<a name="working-with-nlb"></a>

是否可以在 Amazon Transfer Family 服务器前面放置网络负载均衡器 (NLB) 取决于您的服务器使用的协议。在向架构中添加 NLB 之前，请查看以下指南。
+ **FTP 和 FTPS ** — 我们建议不要在服务器前面放置 NLB。此路径中的 NLB 会增加成本并减少服务器接受的并发连接的数量。如果您的 FTP 或 FTPS 实施需要 NLB，请参阅[避免将 NLB 和 NAT 放在前面 Amazon Transfer Family 服务器](infrastructure-security.md#nlb-considerations)以获取配置建议。
+ **SFTP ** — 支持 NLB。使用代理协议 v2 (PPv2)，您可以在 SFTP 连接上保留客户端的源 IP 地址。

将 NLB 放在 Amazon Transfer Family 服务器前面的常见原因是提供自定义监听器端口。 Amazon Transfer Family 已经提供了多个端口，因此在添加 NLB 之前，请查看[Amazon Transfer Family 端点类型矩阵](sftp-for-transfer-family.md#endpoint-matrix)并[创建 SFTP-enabled 服务器](create-server-sftp.md)查看支持的端口。

## 使用代理协议 v2 为 SFTP 保留客户端的源 IP
<a name="nlb-sftp-source-ip"></a>

当 NLB 位于您的客户端和 SFTP 服务器之间的路径中时，会 Amazon Transfer Family 看到 NLB 的私有 IP 地址，而不是客户端的源 IP 地址。代理协议 v2 (PPv2) 解决了这个问题。NLB 添加了一个承载客户端源 IP 地址的 PPv2 标头，并 Amazon Transfer Family 读取该标头。

启用 PPv2 后，客户端的源 IP 地址将在以下位置可用：
+  Amazon Transfer Family 发送到您的自定义身份提供商的身份验证请求。然后，您可以编写 IP-based 访问策略。
+ 登录条目 Amazon CloudWatch Logs。

## 在现有服务器上启用 PROXY 协议 v2 强制执行
<a name="nlb-sftp-enable-ppv2"></a>

的`SftpMode`成员`ProxyConfig`控制服务器处理 PPv2 标头的方式。它恰好有两个值：`NONE`（默认值）和`PROXY_PROTOCOL_V2_ENFORCED`。有关更多信息，请参阅《Amazon Transfer Family API Reference》**中的 [ProtocolDetails](https://docs.amazonaws.cn/transfer/latest/APIReference/API_ProtocolDetails.html)。

**重要**  
使用`PROXY_PROTOCOL_V2_ENFORCED`时，您必须限制服务器的 VPC 终端节点安全组，使其仅允许通过可信 NLB 的入站流量。

完成以下三个步骤，以便在不拒绝任何连接的情况下启用强制执行。此命令使迁移没有停机时间。

### 步骤 1：在 NLB 目标组上启用 PROXY 协议 v2
<a name="nlb-sftp-enable-step1"></a>

在 NLB 目标组上启用指向服务器的 VPC 终端节点的`proxy_protocol_v2.enabled`属性。此属性指示 NLB 为每个连接预先添加 PPv2 标头。有关说明，请参阅《*弹性负载平衡用户指南》[中的](https://docs.amazonaws.cn/elasticloadbalancing/latest/network/edit-target-group-attributes.html#proxy-protocol)代理协议*。

虽然服务器仍设置为`SftpMode=NONE`，但它会读取并忽略任何 PPv2 标头。在此阶段在目标组上启用 PROXY 协议 v2 不会导致中断。

### 第 2 步：验证标头是否到达每个连接
<a name="nlb-sftp-enable-step2"></a>

在强制执行 PPv2 之前，请确认服务器在每个连接上都收到 PPv2 标头。检查服务器日志中的`CONNECTED`活动类型。在结构化 (JSON) 登录中 Amazon CloudWatch Logs，检查该`proxy-protocol-v2-header`字段的值`ignored`；在传统日志中，检查该`ProxyProtocolV2Header`字段的值是否相同。

该字段具有以下语义：
+ 当连接不包含 PPv2 标头时，该字段不存在。
+ 该值是`ignored`当连接包含 PPv2 标头时，而`SftpMode`是`NONE`。
+ 该值为连接包含 PPv2 标头且服务器在其下`PROXY_PROTOCOL_V2_ENFORCED`方使用该标头`applied`时的值。

继续检查日志，直到每个`CONNECTED`条目都带有该值的字段`ignored`。缺少字段表示某些路径在没有 PPv2 标头的情况下仍能到达服务器。如果您在任何路径缺少标头时强制执行，则服务器会拒绝这些连接。有关这些日志字段的更多信息，请参阅[传输系列的 JSON 结构化日志](cw-structure-logs.md#json-log-entries)和[Transfer Family 的旧](cw-structure-logs.md#legacy-log-entries)。

### 第 3 步：强制执行代理协议 v2
<a name="nlb-sftp-enable-step3"></a>

更新服务器，使的`SftpMode`成员`ProxyConfig`为`PROXY_PROTOCOL_V2_ENFORCED`。然后，服务器要求在每个传入的 SFTP 连接上使用有效的 PPv2 标头。服务器拒绝没有有效 PPv2 标头的连接，并将错误记录到 Amazon CloudWatch Logs。要回滚，`SftpMode`请将设置为`NONE`。

------
#### [ Console ]

在**服务器详细信息**页面上，选择**其他详细信息**旁边的**编辑**，然后打开 ** PROXY 协议配置**选项。有关编辑服务器的完整过程，请参见。[编辑服务器详细信息](edit-server-config.md)

------
#### [ Amazon CLI ]

运行以下命令在服务器上强制执行 PROXY 协议 v2。

```
aws transfer update-server --server-id {{your-server-id}} --protocol-details ProxyConfig={SftpMode=PROXY_PROTOCOL_V2_ENFORCED}
```

如果成功，该命令将返回以下代码并更新您的服务器。

```
{
    "ServerId": "{{your-server-id}}"
}
```

------