Linux负载均衡教程:HAProxy与Nginx配置详解
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Linux负载均衡配置:HAProxy与Nginx教程》,聊聊,我们一起来看看吧!
要在Linux上配置应用负载均衡,核心是使用HAProxy或Nginx作为反向代理工具。1. HAProxy适用于高并发、低延迟场景,支持多种负载均衡算法(如轮询、最少连接、源IP哈希),通过frontend和backend模块定义监听端口与后端服务器池,并启用健康检查和会话保持;2. Nginx适合需要集成Web服务的场景,提供静态文件处理、SSL终止等功能,其upstream模块结合proxy_pass指令可实现HTTP/HTTPS负载均衡,支持轮询、最少连接及IP哈希等调度方式,并可通过ip_hash实现会话保持;3. 选择标准:追求极致性能与复杂调度时优先选HAProxy,需Web服务集成则优选Nginx;4. 高级方案可结合两者优势,用HAProxy做前端TCP负载均衡,将流量转发至Nginx集群进行HTTP处理,最终再分发到应用服务器。
Linux上配置应用负载均衡,核心就是利用HAProxy或Nginx这类强大的反向代理工具,将客户端涌入的请求智能地分发到后端多台服务器上。这不仅能有效分散单点压力,大幅提升应用的整体可用性、响应速度,还能为未来的业务扩展提供坚实的基础。说白了,就是让你的服务不再“单打独斗”,而是形成一个高效协作的集群。

解决方案
要实现Linux上的应用负载均衡,我们通常会选择HAProxy或Nginx。这两个工具各有侧重,但都能胜任这项工作。
基本原理: 负载均衡器作为客户端和后端服务器之间的中介,接收所有入站请求,然后根据预设的算法(比如轮询、最少连接等)将这些请求转发给集群中健康的后端服务器。一旦某台后端服务器出现故障,负载均衡器能够自动检测到并停止向其发送请求,从而保障服务的连续性。

HAProxy的配置思路: HAProxy以其高性能和丰富的负载均衡算法而闻名,特别适合高并发场景下的TCP和HTTP负载均衡。
安装HAProxy:
sudo apt update sudo apt install haproxy -y # Debian/Ubuntu # 或者 sudo yum install haproxy -y # CentOS/RHEL
核心配置
/etc/haproxy/haproxy.cfg
: HAProxy的配置通常分为global
(全局设置)、defaults
(默认设置)、frontend
(前端监听)和backend
(后端服务器池)几个部分。global log /dev/log local0 info chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # 最大并发连接数,根据服务器性能调整 maxconn 20000 defaults mode http # 默认工作模式为HTTP,也可以是tcp log global # 默认超时设置 timeout connect 5000ms timeout client 50000ms timeout server 50000ms # 错误页 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http # 前端:监听80端口,接收HTTP请求 frontend my_app_frontend bind *:80 mode http default_backend my_app_backend # 后端:定义应用服务器池 backend my_app_backend mode http balance roundrobin # 负载均衡算法:轮询 # 启用健康检查,每2秒检查一次,2次失败后标记为down,5秒后重试 option httpchk GET /healthz http-check expect status 200 server app1 192.168.1.101:80 check inter 2s fall 2 rise 1 server app2 192.168.1.102:80 check inter 2s fall 2 rise 1 server app3 192.168.1.103:80 check inter 2s fall 2 rise 1 backup # 标记为备用服务器,主服务器都down时才启用 # HAProxy 统计页面 listen stats_page bind *:8080 stats enable stats uri /haproxy_stats stats realm HAProxy\ Statistics stats auth admin:password123 # 设置访问统计页面的用户名和密码
启动/重启HAProxy服务:
sudo systemctl enable haproxy sudo systemctl restart haproxy sudo systemctl status haproxy
Nginx的配置思路: Nginx作为高性能的Web服务器和反向代理,在处理HTTP/HTTPS流量方面非常出色,其负载均衡功能也相当强大且易于配置。
安装Nginx:
sudo apt update sudo apt install nginx -y # Debian/Ubuntu # 或者 sudo yum install nginx -y # CentOS/RHEL
*核心配置
/etc/nginx/nginx.conf
或 `conf.d/.conf:** Nginx的负载均衡主要通过
upstream模块和
proxy_pass`指令实现。# 在http块内定义上游服务器组 http { upstream my_app_servers { # 默认是轮询 (round-robin) server 192.168.1.101:80; server 192.168.1.102:80; server 192.168.1.103:80; # 可以添加权重:server 192.168.1.101:80 weight=3; # 可以添加最少连接:least_conn; # 可以添加ip_hash实现会话保持:ip_hash; } server { listen 80; server_name your_domain.com; # 替换为你的域名或IP location / { proxy_pass http://my_app_servers; # 将请求转发到上游服务器组 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # Nginx默认错误页面路径 } } } }
启动/重启Nginx服务:
sudo systemctl enable nginx sudo systemctl restart nginx sudo systemctl status nginx
HAProxy与Nginx,我该如何选择负载均衡器?
说实话,每次遇到“选哪个”的问题,我脑子里首先浮现的不是什么高大上的理论,而是那些年为了让服务不宕机而熬的夜。HAProxy和Nginx,就像是武林中的两位高手,各有绝活,选择哪一个,真的得看你的具体需求和偏好。
HAProxy:性能狂魔与专业调度员 HAProxy那家伙,简直就是个性能狂魔,纯粹为了转发而生。它在TCP和HTTP层面的负载均衡上表现极其出色,尤其是在高并发连接和低延迟方面,几乎无可匹敌。如果你追求极致的转发性能,需要复杂的负载均衡算法(比如最少连接、源IP哈希、URL哈希等),以及精细的健康检查和会话保持机制,那么HAProxy绝对是首选。它更像是一个专职的“流量指挥官”,把流量分发这事儿做到了极致。我个人偏爱HAProxy处理纯粹的TCP/HTTP代理,因为它在这方面真的极致,尤其是在L4层,它的效率和稳定性让人放心。
Nginx:多面手与Web服务集成者 Nginx呢,更像个多面手,它不仅能当负载均衡,还能搞定静态文件服务、SSL/TLS终止、HTTP缓存、URL重写等等。如果你本身就需要一个强大的Web服务器来处理静态内容,或者需要在一个入口点进行SSL证书管理,并且负载均衡只是你Web架构的一部分,那么Nginx无疑是更方便、更集成的选择。它的配置初看可能有点像在写诗,但一旦摸清了门道,你会发现它真的优雅。对于大多数Web应用而言,Nginx提供的负载均衡功能已经足够强大和灵活。
我的建议是:
- 纯粹的TCP/HTTP负载均衡,追求极致性能和复杂调度: 选HAProxy。
- Web服务集成,需要SSL终止、缓存、静态文件服务,同时进行负载均衡: 选Nginx。
- 如果你想玩得更高级,可以考虑两者结合: HAProxy做前端的TCP负载均衡,将流量转发给Nginx集群,Nginx再处理HTTP/HTTPS请求并转发给应用服务器。这样可以充分发挥两者的优势。
如何用HAProxy实现HTTP负载均衡及会话保持?
用HAProxy实现HTTP负载均衡并确保会话保持,是很多Web应用场景下的刚需。这东西,说白了就是个智能交通警察,把涌进来的请求合理地分发出去,同时还得记住哪些请求是同一个“人”发出来的,得把他们引导到同一台服务器上。
我们来看一个具体的HAProxy配置示例,它会监听80端口,将HTTP请求分发到后端两台Web服务器,并使用cookie
机制实现会话保持。
global log /dev/log local0 info chroot /var/lib/haproxy user haproxy group haproxy daemon maxconn 4000 # 增加最大连接数,应对高并发 defaults mode http log global option httplog # 记录HTTP请求日志 option dontlognull # 不记录空连接 timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http_front bind *:80 mode http # 插入一个名为SERVERID的cookie,值为后端服务器的名称 cookie SERVERID insert indirect nocache default_backend http_back backend http_back mode http balance roundrobin # 负载均衡算法:轮询 # 启用健康检查,检查后端服务器的/healthz路径,期望返回200状态码 option httpchk GET /healthz http-check expect status 200 # 定义后端服务器,并为其指定一个名称(用于cookie) # 'check' 开启健康检查 # 'inter 2s' 每2秒检查一次 # 'fall 3' 连续3次检查失败则标记为DOWN # 'rise 2' 连续2次检查成功则标记为UP # 'cookie app1' 告诉HAProxy,如果请求的cookie值是'app1',就导向这台服务器 server app_server1 192.168.1.101:80 check inter 2s fall 3 rise 2 cookie app1 server app_server2 192.168.1.102:80 check inter 2s fall 3 rise 2 cookie app2
配置解析:
frontend http_front
:bind *:80
: HAProxy将监听所有网络接口的80端口,接收HTTP请求。mode http
: 明确指定工作在HTTP模式。cookie SERVERID insert indirect nocache
: 这是实现会话保持的关键。SERVERID
: 这是将要插入到客户端浏览器中的Cookie的名称。insert
: 表示HAProxy会在服务器响应中插入这个Cookie。indirect
: 告诉HAProxy,即使后端服务器已经设置了同名Cookie,HAProxy也不会覆盖它,而是优先使用自己的。nocache
: 防止代理服务器缓存此Cookie。
default_backend http_back
: 所有进入http_front
的请求都将被转发到http_back
后端池。
backend http_back
:mode http
: 后端池也工作在HTTP模式。balance roundrobin
: 负载均衡算法采用轮询方式,即依次将请求分发给后端服务器。其他常用算法还有leastconn
(最少连接)、source
(基于源IP哈希,也可以实现会话保持,但不如cookie灵活)。option httpchk GET /healthz
: 开启HTTP健康检查。HAProxy会定期向后端服务器的/healthz
路径发送GET请求。http-check expect status 200
: 期望健康检查的响应状态码是200,否则认为服务器不健康。server app_server1 192.168.1.101:80 check ... cookie app1
:app_server1
: 这是HAProxy内部识别这台服务器的名称,也是cookie
指令中cookie app1
对应的服务器标识。192.168.1.101:80
: 后端应用服务器的IP地址和端口。check inter 2s fall 3 rise 2
: 详细的健康检查参数。cookie app1
: 当客户端发送的请求中包含SERVERID=app1
这个Cookie时,HAProxy会尝试将请求转发到app_server1
这台服务器。
通过上述配置,当用户首次访问时,HAProxy会选择一台后端服务器(例如app_server1
),并在响应中插入SERVERID=app1
的Cookie。后续该用户的请求,只要带着这个Cookie,HAProxy就会“记住”并将请求始终发送到app_server1
,从而实现会话的“粘性”。
Nginx作为反向代理,如何配置HTTP/HTTPS负载均衡?
Nginx在HTTP/HTTPS负载均衡方面,用起来相当顺手,尤其是在处理SSL/TLS加密和证书管理上,它能做到“一站式”解决。它更像是一个多功能的网关,不仅能分发流量,还能顺便把SSL证书给卸载掉,减轻后端服务器的负担。
下面是一个Nginx配置示例,涵盖了HTTP和HTTPS的负载均衡,以及简单的会话保持(基于IP哈希)。
http { # 定义上游服务器组,用于HTTP负载均衡 upstream my_http_backend { # 默认是轮询 (round-robin) server 192.168.1.101:80; server 192.168.1.102:80; # 可以添加权重,例如:server 192.168.1.103:80 weight=3; # 最少连接调度:least_conn; # IP哈希会话保持: # ip_hash; # Nginx Plus(商业版)支持更高级的会话保持,如sticky cookie } # 定义上游服务器组,用于HTTPS负载均衡(如果后端服务器也跑HTTPS) upstream my_https_backend { server 192.168.1.101:443; server 192.168.1.102:443; # ip_hash; # 同样可以用于HTTPS的会话保持 } # HTTP服务器块:处理HTTP请求,并转发到后端HTTP服务 server { listen 80; server_name your_domain.com; # 替换为你的域名 # 强制将HTTP请求重定向到HTTPS return 301 https://$host$request_uri; } # HTTPS服务器块:处理HTTPS请求,并转发到后端HTTP/HTTPS服务 server { listen 443 ssl; server_name your_domain.com; # 替换为你的域名 # SSL证书配置 ssl_certificate /etc/nginx/ssl/your_domain.crt; # 你的证书文件路径 ssl_certificate_key /etc/nginx/ssl/your_domain.key; # 你的私钥文件路径 # 推荐的SSL设置,提高安全性 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { # 将请求转发到之前定义的HTTP后端服务器组 proxy_pass http://my_http_backend; # 传递原始请求头,这对后端服务获取客户端真实IP等信息很重要 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 告知后端协议是HTTPS # 连接超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # Nginx默认错误页面路径 } } # 如果后端服务也是HTTPS,可以这样配置 # location /secure_app { # proxy_pass https://my_https_backend; # proxy_ssl_server_name on; # 如果后端服务器有多个域名,需要开启SNI # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; # } } }
配置解析:
upstream my_http_backend
/my_https_backend
:- 这是Nginx定义后端服务器池的方式。你可以定义多个
upstream
块来对应不同的服务或端口。 server IP:Port;
: 列出后端服务器的IP地址和端口。Nginx默认采用轮询(round-robin)方式分发请求。ip_hash;
: 这是Nginx实现会话保持的一种简单方式。它会根据客户端的源IP地址计算哈希值,并将来自同一IP的请求始终转发到同一台后端服务器。缺点是如果客户端IP地址变化(比如通过代理),会话可能会中断;并且在后端服务器数量较少时,负载可能不均衡。
- 这是Nginx定义后端服务器池的方式。你可以定义多个
server
块 (HTTP):listen 80;
: 监听80端口接收
本篇关于《Linux负载均衡教程:HAProxy与Nginx配置详解》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

- 上一篇
- 夸克AI生成电商详情页,高效文案技巧分享

- 下一篇
- JavaScript动态搜索与多标签页实现技巧
-
- 文章 · linux | 2小时前 |
- Linux网络延迟高怎么优化?
- 288浏览 收藏
-
- 文章 · linux | 3小时前 |
- LinuxRAID搭建教程:磁盘阵列配置详解
- 501浏览 收藏
-
- 文章 · linux | 3小时前 |
- rsync与tar备份对比实操指南
- 236浏览 收藏
-
- 文章 · linux | 3小时前 |
- Linux搭建Web服务器详细教程
- 253浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux镜像源选择与设置教程
- 433浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux下VPN设置:OpenVPN与WireGuard对比
- 422浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux审计配置指南:auditd日志分析与设置
- 229浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux用户认证与PAM配置全解析
- 377浏览 收藏
-
- 文章 · linux | 4小时前 |
- Linux内核调优技巧与sysctl设置
- 278浏览 收藏
-
- 文章 · linux | 5小时前 | dockercompose 性能优化 应用监控 多服务部署 Nginx+PHP+MySQL
- Docker多服务部署教程:Nginx+PHP+MySQL配置指南
- 398浏览 收藏
-
- 文章 · linux | 5小时前 |
- Linux磁盘I/O优化技巧全解析
- 437浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 99次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 90次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 110次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 101次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 101次使用
-
- 命令行工具:应对Linux服务器安全挑战的利器
- 2023-10-04 501浏览
-
- 如何使用Docker进行容器的水平伸缩和负载均衡
- 2023-11-07 501浏览
-
- linux .profile的作用是什么
- 2024-04-07 501浏览
-
- 如何解决s权限位引发postfix及crontab异常
- 2024-11-21 501浏览
-
- 如何通过脚本自动化Linux上的K8S安装
- 2025-02-17 501浏览