阿里云SLB负载均衡网站流量分发规则配置完全指南
引言:为什么网站需要负载均衡
在互联网业务高速发展的今天,单一服务器承载网站所有流量的模式早已难以为继。当大量用户同时访问一个网站时,单台服务器的CPU、内存、网络带宽等资源很快就会成为瓶颈,导致页面响应变慢甚至服务完全中断。更严重的是,一旦这台服务器发生硬件故障或遭受恶意攻击,整个网站将完全不可用,由此造成的业务损失和用户流失难以估量。
阿里云负载均衡SLB(Server Load Balancer)正是为解决这些问题而生的核心云服务。SLB通过将访问流量自动分发到多台后端服务器上,不仅突破了单台服务器的性能上限,还通过健康检查机制自动屏蔽故障节点,实现了业务的高可用与弹性扩展。对于网站运营者而言,合理配置SLB的流量分发规则,是保障用户体验、提升系统稳定性的关键一步。
需要先登录阿里云控制台,点击:阿里云控制台
一、SLB产品体系与选型指南
阿里云SLB并非单一产品,而是一个包含三种不同形态的负载均衡家族。理解各产品之间的差异,是正确配置流量分发规则的第一步。
1.1 应用型负载均衡ALB
ALB面向七层应用(HTTP/HTTPS/gRPC/QUIC),是当前阿里云主推的负载均衡产品。它支持内容路由、域名转发、URL路径转发、重定向、SSL卸载等高级功能,单实例可支撑百万级QPS。对于绝大多数Web网站、API服务、微服务架构等场景,ALB是最佳选择。ALB基于Tengine(Nginx增强版)实现七层负载均衡,具备更强的应用层流量调度能力与安全防护能力。
1.2 网络型负载均衡NLB
NLB专注于四层网络协议(TCP/UDP),基于高性能网络转发架构设计,单实例支持亿级并发连接,转发延迟低至微秒级。适用于实时音视频、游戏服务器、高性能数据库代理等对性能要求极高的场景。
1.3 传统型负载均衡CLB
CLB是阿里云早期的经典负载均衡产品,兼容四层(TCP/UDP)和七层(HTTP/HTTPS)负载均衡,配置相对简单。但CLB不支持域名与URL路径转发等高级七层特性,目前正逐步被ALB替代。对于简单的负载均衡场景或传统业务迁移,CLB仍可满足需求。
1.4 选型建议
综合来看,Web网站和API服务优先选择ALB;高性能四层业务(如游戏、直播)选择NLB;传统简单业务或成本敏感场景可选择CLB。本文后续配置将主要基于ALB展开,部分通用配置同样适用于CLB的七层监听场景。
二、核心配置术语解析
在开始配置之前,需要先理解以下几个SLB的核心概念:
- 实例(Instance):SLB的核心资源实体,包含虚拟服务地址(VIP)、监听规则、服务器组关联关系等,是流量转发的核心载体。
- 监听(Listener):SLB接收用户请求的入口,包含协议(HTTP/HTTPS/TCP/UDP)、端口、转发规则等配置。一个实例可创建多个监听,例如同时监听80端口的HTTP和443端口的HTTPS。单实例上限为50个监听。
- 服务器组(Server Group):后端服务器的逻辑集合,包含ECS实例、ENI弹性网卡、IP地址等类型,用于统一管理后端节点的端口、权重和健康检查规则。
- 调度算法(Scheduling Algorithm):SLB分发流量的策略,决定流量如何分配到后端服务器,常用的有加权轮询、加权最小连接数、一致性哈希等。
- 健康检查(Health Check):SLB定期向后端服务器发送探测请求,根据响应结果判断服务器是否正常,异常节点将被隔离,不再接收流量。
三、配置前的准备工作
在开始配置SLB流量分发规则之前,需要完成以下准备工作,确保配置流程顺畅。
3.1 账号与权限准备
需拥有阿里云账号并完成实名认证,建议使用RAM子账号进行权限管理,遵循最小权限原则,避免主账号密钥泄露。RAM子账号需授予SLB管理权限(如AliyunSLBFullAccess)及ECS、VPC相关权限。
3.2 网络与资源准备
负载均衡实例与后端服务器(如ECS)需位于同一地域,建议选择靠近客户端的地域降低访问延迟。ALB/CLB实例创建后所属VPC无法修改,需提前规划VPC与子网。准备至少2台同地域ECS实例(或IDC服务器、函数计算服务),确保后端服务器已部署应用并正常运行。后端ECS实例必须处于运行中(Running)状态。
四、创建SLB实例
使用负载均衡服务时,您需要创建一个SLB实例,每个SLB实例代表一个负载均衡服务实体,用于接收流量并将其分发给后端服务器。以下是创建SLB实例的核心步骤:
4.1 登录控制台
登录阿里云控制台,导航至负载均衡SLB产品页面。
4.2 创建实例
点击创建实例按钮,根据业务需求选择实例类型(ALB、NLB或CLB)、地域、网络类型(公网/私网)、VPC与交换机等参数。公网类型实例提供公网IP地址对外提供服务,私网类型实例仅在VPC内部提供负载均衡服务。
4.3 实例规格与计费
根据预估的QPS和并发连接数选择合适的实例规格。ALB和NLB采用按量计费模式,CLB支持按量计费和包年包月两种模式。新创建的SLB实例默认处于“未配置”状态,需依次完成监听配置、后端服务器添加、健康检查启用等关键步骤方可对外提供高可用服务。
五、配置监听——流量分发的入口
监听是SLB接收用户请求的入口,是流量分发规则配置的核心环节。
5.1 选择监听协议与端口
根据应用需求确定监听协议类型和端口号:
- HTTP监听:适用于普通的Web网站,监听80端口
- HTTPS监听:适用于需要加密传输的Web网站,监听443端口,需上传SSL证书
- TCP监听:适用于四层协议应用,根据实际应用指定端口
- UDP监听:适用于实时音视频等场景
5.2 四层与七层监听的本质差异
四层监听(TCP/UDP)基于LVS+Keepalived实现,侧重于端口映射与连接数监控,健康检查基于TCP连接状态进行探测。七层监听(HTTP/HTTPS)基于Tengine(Nginx增强版)实现,独有三大高级特性:
- 转发规则:支持Host头(域名)匹配、Path前缀匹配等精细化路由
- 会话保持:支持植入Cookie或基于源IP的粘性会话
- 健康检查:支持HTTP状态码、响应内容、超时重试等深度探测参数
5.3 配置后端服务器组
将后端ECS实例或其他计算资源加入后端服务器组,并确保这些实例已经正确配置了对应的服务端口,能够响应SLB转发过来的请求。服务器组支持ECS实例、ENI弹性网卡、IP地址等多种类型的后端节点。单个服务器组最多可添加20台ECS实例。
六、调度算法——流量如何分配
调度算法是SLB分发流量的核心策略,决定了流量如何分配到后端服务器。SLB支持多种调度算法,每种算法适用于不同的流量模式和服务器配置。
6.1 轮询(Round Robin)
轮询算法按照访问顺序依次将外部请求依序分发到后端服务器。例如,有两台ECS实例时,第一个请求发往ECS01,第二个发往ECS02,第三个发往ECS01,依此类推。轮询算法适用于短连接、无状态的HTTP请求场景,每台服务器处理时间大致均匀。其优势是配置简单、分发均匀;缺点是不感知服务器实时负载,如果服务器性能差异较大,可能导致高性能服务器负载不足而低性能服务器过载。
6.2 加权轮询(Weighted Round Robin)
加权轮询在轮询的基础上加入了权重的概念。权重值越高的后端服务器,被轮询到的次数(概率)也越高。例如,两台ECS实例分别设置权重60和40,则第一台实例处理60%的请求,第二台处理40%的请求。加权轮询适用于后端服务器配置不同(CPU、内存、网络带宽有差异)的场景,通过权重比例分配流量,使高性能服务器承载更多负载。ALB、NLB和CLB均支持加权轮询算法。
6.3 加权最小连接数(Weighted Least Connections)
加权最小连接数结合了最少连接数和加权的概念,不仅考虑服务器当前的连接数,还考虑了服务器的权重,从而更加智能地分配请求。该算法将新的请求分配给当前活跃连接数最少且权重较高的服务器。适用于长连接场景,如数据库连接,其中连接数是服务器负载的有效代理指标。ALB和NLB支持加权最小连接数算法。
6.4 一致性哈希(Consistent Hashing)
一致性哈希算法根据特定的哈希键(如源IP地址、四元组等)将请求分配到固定的后端服务器。ALB支持基于源IP地址和URL的一致性哈希;NLB支持基于源IP地址、四元组(源IP、目的IP、源端口、目的端口)和QUIC ID的一致性哈希;CLB支持基于源IP地址、四元组和QUIC ID的一致性哈希。一致性哈希可以实现会话保持的功能,即来自同一客户端的请求总是被发送到同一台服务器。
七、会话保持——让用户不"掉线"
会话保持(Session Persistence)是负载均衡器中的重要功能,它确保来自同一客户端的请求在一段时间内被路由到同一个后端服务器。这对于需要维持会话状态的应用程序非常重要,比如购物车或用户登录状态等。
7.1 基于源IP的会话保持
根据客户端的源IP地址来确定将请求发送到哪个后端ECS实例。这种方式实现简单,但可能不够精确,因为多个用户可能共享相同的IP地址(例如通过NAT访问互联网的用户)。
7.2 基于Cookie的会话保持
对于HTTP/HTTPS协议的应用,基于Cookie的会话保持是最佳选择。阿里云SLB提供两种Cookie方式:
- 植入Cookie:SLB为每个请求插入一个特殊的Cookie,包含指向特定后端ECS实例的信息。用户后续请求携带此Cookie时,SLB将请求转发给之前指定的后端服务器。
- 重写Cookie:如果应用本身已经使用了Cookie来实现会话管理,SLB可以重写这些Cookie,添加会话保持所需的信息。
7.3 超时时间配置
配置会话保持时,需要设置超时时间(单位:秒)。如果超时时间过短,可能会导致有效的会话被中断;如果超时时间过长,则可能导致资源浪费,因为后端服务器可能会保留不必要的会话信息。默认超时时间为300秒。
八、健康检查——自动剔除故障节点
健康检查是SLB确保高可用性的核心机制,它定期向后端服务器发送探测请求,根据响应结果判断服务器是否正常,异常节点将被自动隔离,不再接收流量。
8.1 健康检查类型
对于四层(TCP)监听,可以配置基于TCP连接的健康检查。对于七层(HTTP/HTTPS)监听,可以配置更复杂的HTTP健康检查,如发送特定HTTP请求来判断后端服务器的健康状态。
8.2 核心配置参数
健康检查的核心配置参数包括:
- 健康检查路径:SLB向后端服务器发送健康检查请求的URL路径,默认通常是/,可根据需要设置为其他路径
- 健康检查域名:如果有多个站点托管在同一台ECS上,可指定特定域名进行健康检查
- 响应超时时间:SLB等待后端ECS实例响应的时间长度,超时则视为检查失败
- 健康检查间隔:SLB向后端ECS实例发送健康检查请求的时间间隔,可在几秒到几十秒之间设置
- 健康阈值:连续几次健康检查成功后,SLB将该ECS实例视为健康状态
- 不健康阈值:连续几次健康检查失败后,SLB将该ECS实例视为不健康状态,并停止向其转发请求
8.3 配置注意事项
健康检查的频率和超时时间等参数应根据业务需求合理设置,过短可能导致频繁切换影响性能,过长则可能无法及时发现故障。确保后端ECS实例上运行的服务能够响应指定的健康检查路径和域名。健康检查路径需与后端应用实际探活接口对齐。
九、高级转发规则——域名与URL路径分发
对于七层HTTP/HTTPS监听,ALB支持基于域名和URL路径的高级转发规则,实现精细化的流量分发。
9.1 基于域名的转发
SLB支持通过HTTP请求的域名进行流量分发。例如,SLB的IP地址绑定了abc.com和xyz.com两个域名,两个应用所属的服务器组分别绑定到这两个域名。SLB接收到流量后,根据HTTP请求的域名进行流量分发:域名是abc.com的请求转发到服务器组A,域名是xyz.com的请求转发到服务器组B。配置步骤为:在监听器配置中启用基于域名的转发规则,添加新的转发规则并输入希望被识别的域名。只有七层HTTP或HTTPS监听才支持配置域名转发。
9.2 基于URL路径的转发
除了域名转发,ALB还支持基于URL路径的转发规则。例如,如果想让所有以/api/开头的请求被发送到一组特定的后端服务器,可以设置路径匹配规则如/api/*。配置步骤为:在相应的监听器下选择转发规则选项,点击添加转发规则,输入具体的路径信息。路径匹配支持前缀匹配和正则表达式匹配。
9.3 组合转发条件
ALB支持同时基于域名和路径的组合转发条件。转发规则包含转发条件和转发动作。可以自定义转发条件,指定请求的域名、路径、请求头、查询字符串、请求方法、Cookie、源IP等。也可以自定义转发动作,配置固定响应、重定向、插入请求头、删除请求头、流量镜像、转发至后端多服务器组和重写等。
9.4 共享实例的多应用分发
为了节省成本,可以将多个应用共享(复用)一个负载均衡实例,使用同一个公网IP地址和端口对外暴露。例如,两个应用对外提供同一个公网IP地址且端口都是80。可以通过为两个应用设置不同的域名来实现流量分发。配置完成后,可以通过修改本地hosts文件进行测试。
十、访问控制——安全防护
为确保资源安全,可以使用访问控制策略来规范对资源的访问。SLB支持以下访问控制方式:
10.1 IP黑白名单(ACL)
可以为ALB和CLB实例的不同监听配置访问白名单或黑名单。开启白名单时,仅转发来自所选访问控制策略组中设置的IP地址或地址段的请求,适用于只允许特定IP访问的场景。开启黑名单时,来自所选访问控制策略组中设置的IP地址或地址段的所有请求都不会被转发,适用于只限制某些特定IP访问的场景。为SLB实例的监听添加准确的白名单限制,可以减小开放的网络范围,保障云环境的网络安全。
10.2 安全组
安全组作为虚拟防火墙,用于管理入方向和出方向的流量,提升资源安全性。可以将ALB和NLB实例添加到安全组中,并基于业务需求配置安全组规则。ALB或NLB实例创建后,系统会自动在VPC中创建一个托管安全组。该安全组包含优先级为1的规则,允许ALB或NLB实例的本地IP地址与后端服务器通信以及进行健康检查。
十一、通过CLI与SDK实现自动化配置
除了控制台操作,阿里云还提供了CLI工具和多语言SDK,支持通过代码方式自动化配置SLB流量分发规则。
11.1 阿里云CLI配置示例
使用阿里云CLI(aliyun命令)可以完成SLB实例的创建、监听配置、服务器组管理等操作。以下是通过CLI创建ALB实例并配置监听的核心命令示例:
# 创建ALB实例\naliyun alb create-load-balancer --zone-id cn-hangzhou-g --vpc-id vpc-xxxxx --address-type Internet\n\n# 创建服务器组\naliyun alb create-server-group --protocol HTTP --vpc-id vpc-xxxxx --health-check-enabled true\n\n# 添加后端服务器\naliyun alb add-servers-to-server-group --server-group-id sgp-xxxxx --servers '[{\"ServerId\":\"i-xxxxx\",\"Weight\":100}]'\n\n# 创建HTTP监听\naliyun alb create-listener --load-balancer-id alb-xxxxx --protocol HTTP --port 80 --default-actions '[{\"Type\":\"ForwardGroup\",\"ForwardGroupConfig\":{\"ServerGroupTuples\":[{\"ServerGroupId\":\"sgp-xxxxx\"}]}}]'11.2 Python SDK配置示例
以下是通过阿里云Python SDK创建ALB实例并配置监听规则的示例代码:
from aliyunsdkcore.client import AcsClient\nfrom aliyunsdkalb.request.v20200616 import CreateLoadBalancerRequest, CreateServerGroupRequest, AddServersToServerGroupRequest, CreateListenerRequest\n\n# 初始化客户端\nclient = AcsClient('your-access-key-id', 'your-access-key-secret', 'cn-hangzhou')\n\n# 创建ALB实例\nrequest = CreateLoadBalancerRequest.CreateLoadBalancerRequest()\nrequest.set_ZoneId('cn-hangzhou-g')\nrequest.set_VpcId('vpc-xxxxx')\nrequest.set_AddressType('Internet')\nresponse = client.do_action_with_exception(request)\n\n# 创建服务器组\nrequest = CreateServerGroupRequest.CreateServerGroupRequest()\nrequest.set_Protocol('HTTP')\nrequest.set_VpcId('vpc-xxxxx')\nrequest.set_HealthCheckEnabled(True)\nresponse = client.do_action_with_exception(request)\n\n# 添加后端服务器\nrequest = AddServersToServerGroupRequest.AddServersToServerGroupRequest()\nrequest.set_ServerGroupId('sgp-xxxxx')\nrequest.set_Servers('[{\"ServerId\":\"i-xxxxx\",\"Weight\":100}]')\nresponse = client.do_action_with_exception(request)\n\n# 创建HTTP监听\nrequest = CreateListenerRequest.CreateListenerRequest()\nrequest.set_LoadBalancerId('alb-xxxxx')\nrequest.set_Protocol('HTTP')\nrequest.set_ListenerPort(80)\nrequest.set_DefaultActions('[{\"Type\":\"ForwardGroup\",\"ForwardGroupConfig\":{\"ServerGroupTuples\":[{\"ServerGroupId\":\"sgp-xxxxx\"}]}}]')\nresponse = client.do_action_with_exception(request)十二、最佳实践与性能优化
12.1 多可用区部署
为实现更高的可用性,建议将SLB实例部署在多个可用区。当主可用区出现故障时,SLB会自动将流量切换到备用可用区,确保业务不中断。
12.2 与弹性伸缩集成
将SLB与弹性伸缩(Auto Scaling)集成,可以实现后端服务器的自动扩缩容。当业务流量增长时,弹性伸缩自动增加ECS实例并注册到SLB后端服务器组;当流量下降时,自动减少实例。
12.3 安全组策略配置
合理配置安全组规则,确保SLB能够访问后端服务器的业务端口。需允许SLB健康检查网段访问ECS业务端口。安全组配置应遵循最小权限原则,仅开放必要的端口和IP范围。
12.4 X-Forwarded-For配置
对于七层HTTP/HTTPS监听,建议开启X-Forwarded-For头部插入功能,用于记录客户端的原始IP地址。这样后端服务器可以通过X-Forwarded-For头部获取真实的客户端IP,便于日志分析和安全审计。
12.5 权重动态调整
后端服务器的权重值范围为0到100。权重为0时,该服务器不接收任何流量。可以通过CLI或控制台动态调整权重,实现流量的平滑迁移和灰度发布。
结语
阿里云SLB负载均衡的流量分发规则配置是一项系统性的工程,涉及产品选型、监听配置、调度算法选择、会话保持设置、健康检查调优、高级转发规则配置、访问控制策略等多个环节。通过合理配置这些规则,可以构建高可用、高性能的网站流量分发架构。本文从基础概念到高阶配置,结合控制台操作步骤与CLI/SDK代码示例,全面覆盖了SLB流量分发规则配置的全链路实操。希望读者能够根据自身业务需求,灵活运用本文介绍的各项配置技巧,构建稳定高效的云上负载均衡体系。
常见问题解答
问1:ALB、NLB和CLB三者之间应该如何选择?
答:Web网站、API服务和微服务架构优先选择ALB,因为它支持域名转发、URL路径转发等高级七层特性;高性能四层业务(如游戏、直播、数据库代理)选择NLB,它支持亿级并发连接和微秒级延迟;传统简单业务或成本敏感场景可选择CLB。
问2:加权轮询和加权最小连接数算法有什么区别?
答:加权轮询仅根据服务器权重按比例分配请求,不考虑服务器当前的实时负载;加权最小连接数在考虑权重的同时,还考虑服务器当前的活跃连接数,将请求分配给连接数最少且权重较高的服务器,更适合长连接场景。
问3:七层HTTP监听和四层TCP监听在健康检查上有什么区别?
答:四层TCP监听的健康检查基于TCP连接状态进行探测;七层HTTP监听的健康检查可以发送特定的HTTP请求(如GET /health),根据HTTP状态码或响应内容判断后端服务器的健康状态,探测更加精细。
问4:如何实现同一SLB实例下多个域名的流量分发?
答:在七层HTTP/HTTPS监听中配置基于域名的转发规则。为每个域名添加一条转发规则,并指定对应的后端服务器组。SLB接收到请求后,根据HTTP请求头中的Host字段进行匹配,将请求转发到对应的服务器组。
问5:会话保持的超时时间应该设置多长?
答:超时时间应根据业务特点合理设置。默认值为300秒(5分钟)。对于购物车、用户登录等场景,建议根据用户平均会话时长设置,一般设置在15-30分钟之间。设置过短会导致有效会话被中断,设置过长可能导致后端服务器资源浪费。
问6:如何通过API或CLI实现SLB配置的自动化?
答:阿里云提供了CLI工具(aliyun命令)和多语言SDK(Python、Java、Go等)。可以通过编写脚本调用API完成实例创建、监听配置、服务器组管理、权重调整等操作,实现基础设施即代码(IaC)的自动化运维。



