human: 如何处理七牛云的云主机监听

gpt: [云主机](https://developer.qiniu.com/qvm) > 使用指南 > 负载均衡 >监听

#  监听

最近更新时间: 2018-04-26 18:03:32

# **监听概述**

监听负责检查客户端请求，然后根据调度算法定义的转发策略将请求流量转发给后端服务器。它提供四层（TCP/UDP 协议）和七层（HTTP/HTTPS
协议）监听，你可根据应用场景选择监听协议。

  

# **配置四层监听**

四层（TCP 协议和 UDP 协议）监听将请求直接转发到后端实例，而且不修改请求标头。

  * **TCP 协议**

TCP 是面向连接的协议，在正式收发数据前，必须和对方建立可靠的连接。TCP
协议适用于注重可靠性，对数据准确性要求高，速度可以相对较慢的场景，如文件传输、发送或接收邮件、远程登录和无特殊要求的 Web 应用。

  * **UDP 协议**

UDP 是面向非连接的协议，在数据发送前不与对方进行三次握手，直接进行数据包发送，不提供差错恢复和数据重传，可靠性相对低但数据传输快 UDP
协议多用于关注实时性而相对不注重可靠性的场景，如视频聊天、金融实时行情推送等。UDP 协议监听有如下限制：

    * 每个监听最大连接数限制：100 000
    * 暂不支持分片包
    * 在以下两种情况下，UDP 协议监听配置需要 5 分钟才能生效：移除后端服务器。健康检查检测到异常后，将后端服务器的权重设置为 0。
  * **前端端口**

用来接收请求并向后端服务器进行请求转发的端口，输入范围为 1-65535。**注意：在同一个负载均衡实例内，前端端口不可重复。**

  * **后端端口**

后端服务器（实例）开放用来接收请求的端口，输入范围为 1-65535。**注意：在同一个负载均衡实例内，后端端口可重复。**

  * **调度算法**

    * 加权轮询：权重值越高的后端服务器，被轮询到的概率也越高。

    * 加权最小连接数：除了根据每台后端服务器设定的权重值来进行轮询，同时还考虑后端服务器的实际负载即连接数。当权重值相同时，当前连接数越小的后端服务器被轮询到的概率也越高。

    * 轮询：按照访问顺序依次将外部请求依序分发到后端服务器。

  * **使用服务器组**

选择是否使用服务器组。使用服务器组，可以在监听维度上个性化定义服务器组，即负载均衡实例下的不同监听可使用不同的服务器组。

**注意：**
使用服务器组后，该监听会将流量转发到选择的服务器组，负载均衡实例维度的后端服务器不再生效。如果不开启服务器组，监听会将流量转发到后端服务器池内绑定的服务器上。详情请参考[添加后端服务器](https://developer.qiniu.com/qvm/manual/qvm-
backend-server#2)。

  * **服务器组类型**

    * 虚拟服务器组：一个虚拟服务器组由多个后端服务器组成，且后端服务器的端口可以不同。你可以为不同的监听配置不同的虚拟服务器组，这样就可以将请求转发至不同的后端服务器。详情请参考[创建虚拟服务器组](https://developer.qiniu.com/qvm/manual/qvm-backend-server#step032)。

    * 主备服务器组：一个主备服务器组由两台后端服务器组成，即一台主服务器，一台备服务器。当你有主备需求时，可以使用主备服务器组。当主机工作正常时，将流量转发至主服务器；当主机宕机时，会将流量转发至备服务器，避免服务中断。详情请参考[创建主备服务器组](https://developer.qiniu.com/qvm/manual/qvm-backend-server#step031)。

  * **会话保持**

是否开启会话保持。开启会话保持后，负载均衡监听会把来自同一客户端的访问请求分发到同一台后端服务器上。针对 TCP 监听，负载均衡是基于 IP
地址的会话保持，即来自同一 IP 地址的访问请求转发到同一台后端服务器上。**注意：UDP 监听不支持会话保持**

  * **超时时间**

指定 TCP 会话保持的超时时间。可选值为 1-3600 秒。

  

# **配置七层监听**

七层（HTTP 协议和 HTTPS 协议）的负载均衡服务，负载均衡七层监听原理上是反向代理的一种实现。客户端 HTTP
请求到达负载均衡监听后，负载均衡服务器会通过与后端服务器建立 TCP 连接，即再次通过新 TCP 连接 HTTP
协议访问后端服务器，而不是直接转发报文到后端服务器。

  * **HTTP 协议**

HTTP 是应用层协议，主要解决如何包装数据。适用于需要对数据内容进行识别的应用，如 Web 应用、小的手机游戏等。

  * **HTTPS 协议**

HTTPS 是以安全为目标的 HTTP 通道，即 HTTP 下加入 SSL 层来保证数据安全。负载均衡支持 HTTPS
单向和双向认证。提供证书管理功能，无需在后端服务器上进行证书配置，详情查看配置 HTTPS 监听。

  * **前端端口**

用来接收请求并向后端服务器进行请求转发的端口。端口范围为 1-65535。**注意：在同一个负载均衡实例内，前端端口不可重复。**

  * **后端端口**

后端服务器（实例）开放用来接收请求的端口。端口范围为 1-65535。**注意：** 在同一个负载均衡实例内，后端端口可重复。

  * **调度算法**

    * 加权轮询：权重值越高的后端服务器，被轮询到的概率也越高。

    * 加权最小连接数：除了根据每台后端服务器设定的权重值来进行轮询，同时还考虑后端服务器的实际负载即连接数。当权重值相同时，当前连接数越小的后端服务器被轮询到的概率也越高。

    * 轮询：按照访问顺序依次将外部请求依序分发到后端服务器。

  * **使用服务器组**

开启配置后，可以在监听维度上个性化定义服务器组，即实例下的不同监听可使用不同的后端服务器组。一个虚拟服务器组由多个后端服务器组成，且后端服务器的端口可以不同。你可以为不同的监听配置不同的虚拟服务器组，这样就可以将请求转发至不同的后端服务器。详情参考[创建虚拟服务器组](https://developer.qiniu.com/qvm/manual/qvm-
backend-server#step032)。

**注意：**
使用服务器组后，该监听会将流量转发到选择的服务器组，实例维度的后端服务器不再生效。如果不开启服务器组，监听会将流量转发到后端服务器池内添加的服务器上。详情参考[添加后端服务器](https://developer.qiniu.com/qvm/manual/qvm-
backend-server#2)。

  * **双向认证**

开启该配置后支持在服务端和客户端进行 HTTPS 双向认证，你需要上传服务器证书和 CA
证书。不开启，单向认证只需上传服务器证书。**注意：该选项只适用于HTTPS监听。**

  * **服务器证书**

用于用户浏览器检查服务器发送的证书是否是由自己信赖的中心签发的。服务器证书可以到其它服务商购买。服务器证书需要上传到负载均衡的证书管理系统。详情参考[上传证书](https://developer.qiniu.com/qvm/4253/qvm-
listener/xxxx)。**注意：该选项只适用于 HTTPS 监听。**

  * **CA 证书**

服务器用 CA 证书验证收到的客户端证书。如果没有通过验证，拒绝连接。开启双向认证功能后，CA
证书和服务器证书都需要上传到负载均衡的证书管理系统。**注意：该选项只适用于 HTTPS 监听。**

  * **会话保持**

开启会话保持功能后，负载均衡会把来自同一客户端的访问请求分发到同一台后端服务器上进行处理。开启后均采用默认值。

  

# **配置 HTTPS 监听**

为了满足数据传输的安全需求，负载均衡提供了 HTTPS 监听，支持单向和双向认证。在使用 HTTPS
监听前，你需要将需要的证书上传到负载均衡系统。详情查看[上传证书](https://developer.qiniu.com/qvm/4253/qvm-
listener/xxx)。

证书 | 说明 | 单向认证是否需要 | 双向认证是否需要  
---|---|---|---  
服务器证书 | 用来证明服务器的身份。用户浏览器用来检查服务器发送的证书是否是由自己信赖的中心签发的。 | 是 | 是  
CA 证书 | 
* 自签名的 CA 证书：服务器用 CA 证书验证客户端证书的签名。如果没有通过验证，拒绝连接。 
* 客户端证书：用来证明客户端的身份。用于证明客户端用户的身份，使得客户端用户在与服务器端通信时可以证明其真实身份。你可以用自签名的 CA 证书为客户端证书签名。 
| 否 | 是  
  
  

# **配置 HTTPS 单向认证**

本指南提供配置 HTTPS 监听单向认证的完整教程。完成以下三个任务完成配置：

**Step01** 绑定域名

**Step02** 上传服务器证书

**Step03** 配置负载均衡实例

**Step04** 测试负载均衡服务

## **绑定域名**

请前往域名供应商平台，绑定一个域名到创建的负载均衡实例上。

## **上传服务器证书**

在配置 HTTPS 监听单向认证前，你需要购买服务器证书，并将服务器证书上传到负载均衡的证书管理系统。上传后，无需在后端服务器上进行其它证书配置。

**1.** 登录[云主机管理控制台](https://portal.qiniu.com/qvm)

**2.** 在左侧导航栏，单击**证书** ，然后单击**新建**

**3.** 按照以下信息，配置证书：

  * 地域：选择华东 1。**注意：证书的地域和负载均衡实例的地域要相同**

  * 证书类型：选择服务器证书

  * 证书内容和私钥：复制服务器证书的内容和私钥。上传的证书必须是 PEM 格式，详情查看[上传证书](https://developer.qiniu.com/qvm/4253/qvm-listener/xxx)。

**4.** 单击**确定** 完成上传

## **配置负载均衡实例**

**1.** 登录[云主机管理控制台](https://portal.qiniu.com/qvm)

**2.** 在左侧导航栏，单击**负载均衡 > 实例**，然后单击**新建**

**3.** 配置负载均衡实例，单击**创建**
完成创建。详细配置信息参考[创建负载均衡实例](https://developer.qiniu.com/qvm/manual/qvm-slb-
quickstart#3)

**4.** 创建成功后，返回实例管理页面，单击已创建的负载均衡实例 ID/名称链接

**5.** 在详情顶部导航栏，单击**监听** ，然后单击**新建**

**6.** 在新建监听窗口，完成如下配置：

  * 协议：HTTPS

  * 前端端口：443

  * 后端端口：80

  * 调度算法：轮询

  * 服务器证书：选择已上传的服务器证书

**7.** 在顶部导航栏，单击**后端服务器** ，然后单击**添加** ，添加服务器

## **测试负载均衡服务**

**1.** 负载均衡实例配置完成后，在实例管理页面，查看状态。当状态为已启用时，表示后端服务器可以正常接收处理负载均衡监听转发的请求。

**2.** 在浏览器中，输入负载均衡实例的域名地址。刷新浏览器，你可以观察到请求在两台后端服务器之间转换。

  

# **配置 HTTPS 双向认证**

本指南将引导你配置 HTTPS 双向认证的负载均衡服务。本指南中使用自签名的 CA 证书为客户端证书签名。

完成以下操作配置 HTTPS 监听双向认证：

**Step01** 绑定域名

**Step02** 准备服务器证书

**Step03** 使用 OpenSSL 生成 CA 证书

**Step04** 生成客户端证书

**Step05** 上传服务器证书和 CA 证书

**Step06** 安装客户端证书

**Step07** 配置负载均衡实例

**Step08** 测试负载均衡服务

## **绑定域名**

请前往域名供应商平台，绑定一个域名到创建的负载均衡实例上。

## **准备服务器证书**

服务器证书用于用户浏览器检查服务器发送的证书是否是由自己信赖的中心签发的，服务器证书可以到其他服务商处购买。

## **使用 OpenSSL 生成 CA 证书**

**1.** 运行以下命令在`/root`目录下新建一个 **ca** 文件夹，并在 **ca** 文件夹下创建`serial`文件和四个子文件夹。

    
    
    sudo mkdir ca
    cd ca
    sudo touch serial
    sudo mkdir newcerts private conf server
    

  * **serial:** 存放 CA 的 key 起始序列号

  * **newcerts:** 存放 CA 签署过的数字证书（证书备份目录）

  * **private:** 存放 CA 的私钥

  * **conf:** 存放一些简化参数用的配置文件

  * **server:** 存放服务器证书文件

**2.** 在 **conf** 目录下新建一个包含如下信息的`openssl.conf`文件

    
    
     [ ca ]
     default_ca = foo
     [ foo ] 
     dir = /root/ca
     database = /root/ca/index.txt
     new_certs_dir = /root/ca/newcerts
     certificate = /root/ca/private/ca.crt
     serial = /root/ca/serial
     private_key = /root/ca/private/ca.key
     RANDFILE = /root/ca/private/.rand
     default_days = 365
     default_crl_days= 30
     default_md = md5
     unique_subject = no
     policy = policy_any
     [ policy_any ]
     countryName = match
     stateOrProvinceName = match
     organizationName = match
     organizationalUnitName = match
     localityName = optional
     commonName      = supplied
     emailAddress    = optional
    

**3.** 运行以下命令生成私钥**key** 文件

    
    
    cd /root/ca
    sudo openssl genrsa -out private/ca.key
    

**4.** 运行以下命令并按命令后的示例提供需要输入的信息，然后回车，生成证书请求 csr 文件。

    
    
    sudo openssl req -new -key private/ca.key -out private/ca.csr
    

`Common Name`即你的负载均衡实例的绑定域名

**5.** 运行以下命令生成凭证 crt 文件

    
    
    sudo openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
    

**6.** 运行以下命令为 CA 的 key 设置起始序列号，可以是任意四个字符

    
    
    sudo chmod a+w serial
    sudo echo FACE > serial
    

**7.** 运行以下命令创建 CA 键库

    
    
    sudo touch index.txt
    

**8.** 运行以下命令为移除客户端证书创建一个证书撤销列表

    
    
    sudo openssl ca -gencrl -out /root/ca/private/ca.crl -crldays 7 -config "/root/ca/conf/openssl.conf"
    

## **生成客户端证书**

**1.** 运行以下命令在**ca** 目录内创建一个存放客户端 key 的目录 **users**

    
    
    sudo mkdir users
    

**2.** 运行以下命令为客户端创建一个 key，创建 key 时要求输入 pass phrase，这个是当前 key
的口令，以防止本密钥泄漏后被人盗用。两次输入同一个密码。

    
    
    sudo openssl genrsa -des3 -out /root/ca/users/client.key 1024
    

**3.** 运行以下命令为客户端 key 创建一个证书签名请求 csr 文件

    
    
    sudo openssl req -new -key /root/ca/users/client.key -out /root/ca/users/client.csr
    

输入该命令后，根据提示输入上一步输入的 pass phrase，然后根据提示，提供对应的信息。**注意：**`A challenge
password`是客户端证书口令，请注意将它和 client.key 的口令区分开，可以与服务器端证书或者根证书口令一致。

**4.** 运行以下命令使用步骤二中的 CA Key 为刚才的客户端 key 签名

    
    
    sudo openssl ca -in /root/ca/users/client.csr -cert /root/ca/private/ca.crt -keyfile /root/ca/private/ca.key -out /root/ca/users/client.crt -config "/root/ca/conf/openssl.conf"
    

当出现确认是否签名的提示时，两次都输入 y。

**5.** 运行以下命令将证书转换为大多数浏览器都能识别的 PKCS12 文件

    
    
    sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12
    

按照提示输入客户端 client.key 的 pass phrase

再输入用于导出证书的密码。这个是客户端证书的保护密码，在安装客户端证书时需要输入这个密码。

**6.** 运行以下命令查看生成的客户端证书

    
    
    cd users
    ls
    

## **上传服务器证书和 CA 证书**

**1.** 登录[云主机管理控制台](https://portal.qiniu.com/qvm)

**2.** 在左侧导航栏，单击**证书** ，然后单击**新建**

**3.** 按照以下信息，完成如下配置后，单击**确定**

  * 地域：选择华东 1。**注意：证书的地域和负载均衡实例的地域要相同**

  * 证书类型：选择服务器证书

  * 证书内容和私钥：复制服务器证书的内容和私钥。上传的证书必须是 PEM 格式，详情查看[上传证书](https://developer.qiniu.com/qvm/manual/qvm-slb-certificate-management#1)。

**4.** 在左侧导航栏，单击**证书** ，然后单击**新建**

**5.** 在**新建证书** 页面，完成如下配置后，单击**确定**

  * 地域：选择华东 1。**注意：证书的地域和负载均衡实例的地域要相同**

  * 证书类型：选择 CA 证书

  * 证书内容：复制 CA 证书内容。上传的证书必须是 PEM 格式，详情查看[上传证书](https://developer.qiniu.com/qvm/manual/qvm-slb-certificate-management#1)。

## **安装客户端证书**

将生成的客户端证书安装到客户端。本教程以 Mac 客户端，Chrome 浏览器为例。

  * 在 Chrome 浏览器中导入上传的客户端证书

  * 打开 Chrome 浏览器，单击**设置 > 高级 > 管理证书**

  * 在**钥匙串** 列表中选择**登录** ，然后单击**证书** ，导入客户端证书。在导入证书时需要输入在步骤四时生成 PKCS12 文件的密码。

## **配置负载均衡实例**

**1.** 登录[负载均衡管理控制台](https://portal.qiniu.com/qvm/lb)

**2.** 在负载均衡实例列表页面，单击已创建的负载均衡实例 ID/名称链接

**3.** 在顶部导航栏，单击**监听** ，然后单击**新建**

**4.** 在新建监听窗口，完成如下配置

  * 协议：HTTPS

  * 前端端口：443

  * 后端端口：80

  * 调度算法：轮询

  * 双向认证：开启

  * 服务器证书：选择已上传的服务器证书

  * CA 证书：选择已上传的 CA 证书

  * 单击**确定** 完成配置

**5.** 在顶部导航栏，单击**后端服务器** ，添加服务器

## **测试负载均衡服务**

**1.** 负载均衡实例配置完成后，在实例管理页面，查看状态。当状态为已启用时，表示后端服务器可以正常接收处理负载均衡监听转发的请求。

**2.** 在浏览器中，输入负载均衡实例的域名地址

**3.** 刷新浏览器，你可以观察到请求在两台后端服务器之间转换。

  

# **HTTP/HTTPS 监听添加转发策略**

七层负载均衡服务支持配置域名或者URL转发策略，将来自不同域名或者URL的请求转发给不同的主机处理。你可以在一个监听下添加多条转发策略，每条转发策略关联不同的虚拟服务器组（一个虚拟服务器组由一组实例组成）。比如你可以将所有读请求转发到一组后端服务器上而将写请求转发到另一组后端服务器上，这样可以更灵活地适配业务需求，合理分配资源。

在配置了转发策略后，负载均衡系统将按照以下规则转发前端请求：

  * 如果能匹配到相应监听关联的转发策略，则按转发策略，将请求转发到对应的虚拟服务器组。

  * 如果未匹配，而对应监听启用并配置了虚拟服务器组，则将请求转发到对应的虚拟服务器组。

  * 如果均未匹配，则转发到负载均衡实例后端服务器池中的实例。

你不需要在转发策略上单独配置健康检查，下表对比描述了三个维度的健康检查机制。

维度 | 健康检查配置 | 健康检查目标服务器  
---|---|---  
后端服务器 | 使用配置监听时的健康检查配置 | 所有后端服务器  
虚拟服务器组 | 使用配置监听时的健康检查配置 | 相应虚拟服务器组包含的服务器  
转发策略 | 使用配置监听时的健康检查配置 | 相应虚拟服务器组包含的服务器  
  
**注意：** 由于虚拟服务器组中可以对服务器配置不同的端口，因此在配置健康检查时不要设置检查端口，否则会导致采用了不一致端口承载服务的服务器健康检查失败。

  

### **使用说明：**

负载均衡支持分别添加域名或 URL 转发策略，也支持添加域名和 URL 组合的转发策略。

1）域名转发策略配置

单独配置域名转发策略时，URL 配置项留空（不用输入`/`）。域名只能使用字母、数字、连字符`-`、点`.`。

支持精确匹配和通配符匹配两种模式：

  * 精确域名：www.qiniu.com

  * 通配符域名(泛域名)：*.qiniu.com, *.market.qiniu.com

当前端请求同时匹配多条域名规则时，规则的匹配优先级为：精确匹配 > 小范围通配符匹配 > 大范围通配符匹配

2）URL 转发规则配置

单独配置 URL 转发规则时，域名配置项留空。参考以下原则添加 URL：

  * URL 只能包含字母、数字和特殊字符`-` `.` `/` `%` `?` `#` `&`

  * URL 必须以斜杆`/`开头，**注意：** 如果你在 URL 中只输入了一个斜杆`/`，则 URL 转发规则失效。

  * URL 转发支持字符串匹配，按照顺序匹配原则。比如 /admin、/bbs、/test。

3）域名加 URL 转发规则配置

当需要根据相同域名下不同的 URL 路径进行流量转发时，建议你配置一个默认转发策略（URL 留空），以免未匹配到的其它 URL 访问出错。

比如有两个域名分别是`www.aaa.com`和`www.bbb.com`，要求访问`www.aaa.com/index.html`时，将请求转发给
ServerGroup1 处理，其它来自`xxx.html`的请求转发给 ServerGroup2
处理。你需要配置如下转发策略，否则匹配到`www.aaa.com`的域名但没有相关策略匹配会返回`404`的响应码。

    
    
    rule01       www.aaa.com       /index.html       ServerGroup1 
    rule02       www.aaa.com                             ServerGroup2
    

  

### **配置转发策略操作步骤：**

**1.** 登录[云主机管理控制台](https://portal.qiniu.com/qvm)

**2.** 单击左侧导航栏中的**负载均衡 > 实例**，进入负载均衡实例列表页面

**3.** 单击负载均衡实例的 ID/名称链接，在顶部导航栏单击**监听** ，或者单击目标负载均衡实例的**操作** 列内的**管理监听**

**4.** 单击目标协议监听的**操作 > 转发策略**

**5.** 在转发策略页面，单击**添加**

**6.** 在添加转发策略对话框，配置转发规则，然后单击**确定**

以上内容是否对您有帮助？