
# 通过全球加速实现FTP文件传输服务加速
#### 应用场景
FTP（File Transfer Protocol）是一种文件传输协议，基于客户端和服务器架构，支持以下两种工作模式：
- 主动模式（Active Mode）：客户端向FTP服务器发送端口信息，由服务器主动连接该端口。 主动模式的工作流程如下：
  ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000002216468481.png "点击放大")
  
  | **工作流程**     | **描述**                        |
  |:---|:---|
  | ①双方建立控制连接    | 客户端向21端口发送控制连接请求，建立控制连接。      |
  | ②同步客户端数据传输端口 | 客户端向21端口报告可以用于数据传输的端口2100。    |
  | ③传输数据        | 服务端20端口主动连接客户端的2100端口，进行数据传输。 |
  | ④关闭连接        | 数据传输完成后，服务端主动关闭连接。            |
     
  
- 被动模式（Passive Mode）：FTP服务器开启并发送端口信息给客户端，由客户端连接该端口，服务器被动接受连接。 被动模式的工作流程如下：
  ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000002283530701.png "点击放大")
  
  | **工作流程**     | **描述**                               |
  |:---|:---|
  | ①双方建立控制连接    | 客户端向21端口发送控制连接请求，建立控制连接。             |
  | ②同步客户端数据传输端口 | 服务端告知客户端数据传输端口为2120。                 |
  | ③传输数据        | 客户端重新开启一个端口连接服务端的数据传输端口2120，并进行数据传输。 |
  | ④关闭连接        | 数据传输完成后，服务端主动关闭连接。                   |
     
  
GA目前仅支持FTP的被动模式。
FTP支持以下三种认证模式：
- 虚拟用户模式（推荐）：FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务，而不能访问Linux系统的其他资源，进一步增强了FTP服务器的安全性。
- 本地用户模式：通过Linux系统本地账号进行验证的模式，相较于匿名用户模式更安全。
- 匿名用户模式（存在安全隐患，不推荐）：任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全，一般只用来保存不重要的公开文件，不推荐在生产环境中使用。
 
#### 前提条件
- FTP服务器安全组已放通TCP入方向21和用户数据传输的端口范围。 本实践中用户数据传输端口范围以"2100\~2120"为例。
  
- FTP服务器已拥有公网IP地址。
- 关闭FTP服务器对于控制和数据连接IP地址的一致性检查。
 
#### 配置流程
本文以华为云弹性服务器（Elastic Cloud Server）作为FTP服务器。关于华为云弹性云服务器如何配置安全组和公网IP，请参见[安全组概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0140323157.html)和[获取EIP](https://support.huaweicloud.com/usermanual-eip/eip_0008.html)。
| 步骤                                                        | 说明                                                                                                         |
|:---|:---|
| [准备工作]                 | 在购买全球加速实例、EIP、ECS等资源之前，请先注册华为账号并开通华为云、完成实名认证、为账户充值。                                                        |
| [步骤一：安装FTP软件并配置FTP服务器] | 以华为云弹性云服务器Linux操作系统为例，安装并配置vsftpd。 当您使用不同操作系统和vsftpd软件版本时，可能需要根据实际情况调整命令和参数配置。 |
| [步骤二：创建全球加速实例]         | 全球加速服务为全球化业务用户提供应用加速服务，使用全球加速服务前，用户必须先创建全球加速实例。                                                            |
| [步骤三：配置监听器]            | 创建全球加速实例后，您需要为全球加速实例配置监听器。监听器负责监听连接请求，并根据流量转发策略将请求流量分发至终端节点。                                               |
| [步骤四：配置终端节点组和终端节点]       | 将具有相同特性的终端节点放在一个终端节点组组内，每个终端节点组都与特定的区域关联，全球加速实例进行流量分发时，流量分配策略以终端节点组为单位生效。                                  |
| [步骤五：配置验证]            | 在本场景中，全球加速服务的监听器配置的是TCP协议，可以使用curl命令方式验证配置结果。                                                              |
   
 #### 准备工作
如果用户已注册华为云，可直接登录管理控制台，访问全球加速服务。如果用户没有登录管理控制台的账号，请先注册华为云。
1. 注册账号并实名认证。 详细请参见[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)、[实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0071343161.html)。
   如果您已开通华为云并进行实名认证，请忽略此步骤。
   
2. 为账户充值。 请保证账户有足够的资金，以免购买资源失败。详细请参见[账户充值](https://support.huaweicloud.com/usermanual-billing/bills-topic_30000002.html)。
   
 
 #### 步骤一：安装FTP软件并配置FTP服务器
本节介绍在华为云弹性云服务器Linux操作系统安装并配置vsftpd。当您使用不同操作系统和vsftpd软件版本时，可能需要根据实际情况调整命令和参数配置。
1. 远程登录弹性云服务器Linux操作系统。 详细请参见[登录Linux ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0134.html)。
   

2. 执行以下命令安装vsftpd。
   ```
   yum install -y vsftpd
   ```
   
3. 使用本地用户模式进行认证，创建用户。
   ```
   # 创建linux用户
   useradd ftpdemo
   # 修改用户ftpdemo的密码
   passwd ftpdemo
   # 创建一个供FTP服务使用的文件目录
   mkdir /var/ftp/demo
   # ftpdemo用户拥有此目录
   chown -R ftpdemo:ftpdemo /var/ftp/demo
   ```
   
4. 配置vsftpd。
   ```
   vim /etc/vsftpd/vsftpd.conf
   ```
   
5. 修改配置文件。
   ```
   # 除下面提及的参数外，其他参数保持默认值即可
   # 修改下列参数的值
   # 禁止匿名登录FTP服务器
   anonymous_enable=NO
   # 允许本地用户登录FTP服务器
   local_enable=YES
   # 监听IPv4 sockets
   listen=YES
   # 关闭监听IPv6 sockets
   # listen_ipv6=NO
   # 添加下列参数
   # 设置本地用户登录后所在目录
   local_root=/var/ftp/demo
   # 开启被动模式
   pasv_enable=YES
   # 关闭控制和数据连接IP地址的一致性检查，需配置为YES，否则FTP客户端不能上传文件到FTP服务器
   pasv_promiscuous=YES
   # 设置被动模式下，建立数据传输可使用的端口范围的最小值
   pasv_min_port=2100
   # 设置被动模式下，建立数据传输可使用的端口范围的最大值
   pasv_max_port=2120
   # 设置被动模式下，使用GA的Anycast IP进行数据传输
   pasv_address=GA Anycast IP
   ```
   ![](https://support.huaweicloud.com/bestpractice-ga/public_sys-resources/note_3.0-zh-cn.png)
   在FTP被动模式下，以FileZilla工具为例，客户端开启调试模式后，可以查看到服务器接收到PASV命令后返回的响应信息：
   **227 Entering Passive Mode (h1,h2,h3,h4,p1,p2)**
   - h1,h2,h3,h4：表示服务器的IP地址，采用点分十进制表示法，即h1.h2.h3.h4，该IP地址为pasv_address的配置值。 当服务器配置里未填写pasv_address时，将使用私网IP/主机IP。
     
   
   - p1,p2：用于计算数据传输端口号。 计算公式为：端口号 = p1 \* 256 + p2
     端口号范围：pasv_min_port 至 pasv_max_port
     当端口被占用时，会导致数据传输失败。
     
     
6. 按Esc退出编辑模式。
7. 输入":wq"并回车，保存并关闭文件。
8. 执行以下命令启动vsftpd服务。
   ```
   # 重启vsftpd服务
   systemctl restart vsftpd.service
   # 查看vsftpd服务的状态
   systemctl status vsftpd
   ```
   
 
 #### 步骤二：创建全球加速实例
全球加速服务为全球化业务用户提供应用加速服务，使用全球加速服务前，用户必须先创建全球加速实例。
1. 登录[全球加速控制台](https://console.huaweicloud.com/ga/?locale=zh-cn#/)。

2. 在全球加速服务页面，单击"购买全球加速服务"。
3. 根据界面提示配置相关参数，详细请参见[表1]。
   图1创建全球实例   
   ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000001962516477.png "点击放大")
    表1创建全球加速实例 
   | **参数** | **示例**                                                                                      | **说明**                                                                                                                                                                                                                                                                                                   |
   |:---|:---|:---|
   | 名称     | **ga-test**                                                                                 | 用户将要创建的全球加速实例的名称。 只能由中文、英文字母、数字、中划线组成。 长度范围：1-64个字符。                                                                                                                                     |
   | 企业项目   | **default**                                                                                 | 企业项目是一种云资源管理方式，企业项目管理服务提供统一的云资源按项目管理，以及项目内的资源管理、成员管理。 您可以使用已有企业项目，也可以新建企业项目。                                                                                                                                                                   |
   | 加速区域   | **中国大陆**                                                                                    | 加速区域指需要进行访问加速的区域。 支持选择"中国大陆以外"或"中国大陆"。 默认：中国大陆以外。 **本实践选择"中国大陆"。** |
   | IP地址类型 | **IPv4**                                                                                    | 全球加速实例的地址类型。 "加速区域"选择"中国大陆"时，支持选择"IPv4"或"IPv4+IPv6"。 **本实践选择"IPv4"。**                                                                                                                |
   | 标签     | **example_key1** **example_value1** | 为全球加速实例绑定标签，用来标识资源，支持修改。                                                                                                                                                                                                                                                                                 |
   | 描述     | **test**                                                                                    | 全球加速实例描述。 长度范围：不超过255个字符。                                                                                                                                                                                                                        |
      
   
4. 单击"下一步"，进入监听器配置页面。
 
 #### 步骤三：配置监听器
创建全球加速实例后，您需要为全球加速实例配置监听器。监听器负责监听连接请求，并根据流量转发策略将请求流量分发至终端节点。
1. 根据界面提示配置相关参数，详细请参见[表2]。
   图2添加监听器   
   ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000001455132540.png "点击放大")
    表2添加监听器 
   | **参数** | **示例**            | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                   |
   |:---|:---|:---|
   | 名称     | **listener-test** | 监听器名称。 只能由中文、英文字母、数字、中划线组成。 长度范围：1-64个字符。                                                                                                                                                                                                                                                           |
   | 前端协议   | **TCP**           | 客户端与监听器建立流量分发连接的协议。 取值范围：TCP、UDP。                                                                                                                                                                                                                                                                                                                               |
   | 前端端口   | **21,2100-2120**  | 客户端与监听器建立流量分发连接的端口。 端口取值在1-65535之间，端口范围用"-"连接，多个端口或端口范围以逗号隔开。 例如：1-10，11-50，51，52-200 **本实践输入"21,2100-2120"。**                                                                                                 |
   | 客户端亲和性 | **按源IP保持会话**      | 会话保持。 支持选择"关闭"或"按源IP保持会话"。 TCP和UDP协议仅支持"按源IP保持会话"。 按源IP保持会话：基于源IP地址的简单会话保持，将请求的源IP地址作为散列键（HashKey），从静态分配的散列表中找出对应的服务器。即来自同一IP地址的访问请求会被转发到同一台后端服务器上进行处理。 **本实践选择"按源IP保持会话"。** |
   | 标签     | **-**             | 监听器的标识，包括键和值。可以为监听器创建20个标签。                                                                                                                                                                                                                                                                                                                                                                                              |
   | 描述     | **-**             | 监听器描述。 长度范围：不超过255个字符。                                                                                                                                                                                                                                                                                                                                        |
      
   
 
 #### 步骤四：配置终端节点组和终端节点
FTP协议在客户端和服务器之间建立了两条通信链路：控制链路和数据链路。控制链路用于传输FTP命令，而数据链路则负责数据的传输。
在服务所在地域（终端节点组所属地域），全球加速实例有多个终端节点出公网IP，但部分FTP服务器配置了连接检查，要求控制链路和数据链路的客户端IP必须相同。这时，您可以选择关闭FTP服务端的源IP检查。
1. 根据界面提示配置相关参数。详细请参见[表3]。
   图3添加终端节点组   
   ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000002264617973.png "点击放大")
    表3添加终端节点组 
   | **类型** | **参数**  | **示例**                 | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|:---|:---|
   | 终端节点组  | 名称      | **endpointgroup-test** | 终端节点组名称。 每个监听器下每个区域只允许关联一个终端节点组。 只能由中文、英文字母、数字、中划线组成。 长度范围：1-64个字符。                                                                                                                                                                                                                                                   |
   | 终端节点组  | 区域      | **华北-北京四**             | 终端节点组所属区域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 终端节点组  | 描述      | **-**                  | 终端节点组描述。 长度范围：不超过255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 终端节点组  | 流量调度    | **1**                  | 配置到不同终端节点组的流量比例。 如果增加流量调度比例，将有更多的请求分发到此终端节点组。 如果将流量调度比例设置为0，则不会将任何请求分发到此终端节点组。 取值范围为：\[0-100\]。 说明： 如果监听器中有多个终端节点组，分配流量时优先选择时延最低的终端节点组，并按照该终端节点组的流量调度值分配流量，然后再向其他终端节点组分配其余流量。 |
   | 终端节点组  | 终端节点    | **1.92.xx.xx**         | 终端节点充当客户端的接触点，加速实例在正常运行的终端节点间分发传入流量。 本实践选择"自定义IP"，输入FTP服务器的公网IP。                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 健康检查配置 | 是否开启    | **开启**                 | 开启或者关闭健康检查。 关闭健康检查可能会导致业务请求转发至异常的后端服务器。                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 健康检查配置 | 前端协议    | **TCP**                | 健康检查目前支持选择TCP协议或UDP协议。 默认：TCP协议。                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 健康检查配置 | 前端端口    | **21**                 | 健康检查端口号。 取值范围：\[1，65535\]。                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 健康检查配置 | **高级配置**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |||
   | 健康检查配置 | 检查间隔(秒) | **5**                  | 每次健康检查响应的最大间隔时间。 取值范围：\[1-60\]。                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 健康检查配置 | 超时时间(秒) | **5**                  | 每次健康检查响应的最大超时时间。 取值范围：\[1-60\]。                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 健康检查配置 | 最大重复次数  | **3**                  | 健康检查最大的重试次数。 取值范围：\[1-10\]。                                                                                                                                                                                                                                                                                                                                                                                                                |
      
   
2. 单击"保存"，保存配置信息。
3. 单击"下一步"，确认监听器、终端节点组、终端节点信息。
4. 单击"提交"。
5. 等待页面提示"创建加速器实例xxx成功"后，单击"完成"。
 
 #### 步骤五：配置验证
本文以Windows Server 2022系统的弹性云服务器作为FTP客户端，使用FileZilla进行文件传输。
1. 远程连接Windows实例。 详细请参见[登录Windows ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0125.html)。
   
2. 通过[FileZilla官网](https://www.filezilla.cn/)下载安装并启动FileZilla软件。
3. 在顶部导航中，选择"文件 \> 站点管理器"。
   
4. 在站点管理器对话框，单击"新站点"，根据界面提示设置站点名称。
5. 在站点管理器对话框右侧的"常规"区域，为新站点配置传输信息。
   详细请参见[表4]，未列举的参数保持默认配置。
    表4配置站点传输信息 
   | **配置** | **说明**                          |
   |:---|:---|
   | 协议     | 选择FTP-文件传输协议。                   |
   | 主机     | 输入FTP登录主机地址，即全球加速实例的Anycast IP。 |
   | 端口     | 输入"21"。                         |
   | 用户     | 输入FTP登录用户名。                     |
   | 密码     | 输入FTP登录密码。                      |
      
   
6. 单击"连接"，登录FTP服务器。 连接成功后，您可以对网站文件进行上传、下载、新建和删除等操作。
   
7. 可以通过FileZilla工具查看文件上传下载时间，对比加速前后的数据，验证全球加速的加速效果。
 
