Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于负载均衡场景。它支持多种负载均衡策略,可以帮助你优化资源利用、提高响应速度和增加系统的可用性。以下是 Nginx 中几种常见的负载均衡策略及其配置方法:

1. 轮询(Round Robin)

这是默认的负载均衡策略,Nginx 会依次将请求分发给后端服务器。

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在这个例子中,如果没有指定其他策略,Nginx 将按照轮询的方式分配请求。

2. 权重(Weight)

你可以为每个服务器设置权重,这样可以让某些服务器处理更多的请求。权重越高,该服务器被选中的几率越大。

http {upstream backend {server backend1.example.com weight=3;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

这里 backend1 的权重是 3,意味着它处理的请求数量将是其他两个服务器的三倍。

3. IP 哈希(IP Hash)

使用 IP 哈希可以确保来自同一个客户端的所有请求都被发送到相同的服务器上,这对于需要会话保持的应用非常有用。

http {upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

启用 ip_hash 后,Nginx 会根据客户端的 IP 地址计算哈希值,并将其映射到特定的服务器。

4. 最少连接(Least Connections)

此策略会选择当前连接数最少的服务器来处理请求,适合长连接或长时间运行的任务。

http {upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在这种情况下,Nginx 会选择当前活跃连接最少的服务器进行请求转发。

5. 健康检查与故障转移

虽然这不是直接的负载均衡策略,但通过配置健康检查可以确保只有健康的服务器才会接收请求。如果某个服务器出现故障,Nginx 可以自动将其从服务列表中移除,并在恢复后重新加入。

http {upstream backend {server backend1.example.com max_fails=3 fail_timeout=30s;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在这个例子中,如果 backend1 在 30 秒内连续失败三次,则会被标记为不可用,并且在接下来的 30 秒内不会接收任何请求。

结合实际应用

选择哪种负载均衡策略取决于你的具体需求。例如,如果你的应用程序不需要会话保持,那么轮询或者最少连接可能是不错的选择;而如果你的应用依赖于用户的会话状态,则可能需要使用 IP 哈希。同时,合理配置权重可以帮助你更好地利用不同性能级别的服务器资源。

Nginx 提供了多种高级负载均衡特性

除了基本的轮询、权重、IP哈希和最少连接等策略外,还包括一些更复杂的功能来增强系统的灵活性、可靠性和性能。以下是一些值得注意的高级特性:

1. 会话持久性(Session Persistence)

虽然 IP 哈希可以实现简单的会话持久化,但 Nginx Plus 还支持基于 Cookie 的会话持久化。这允许将用户请求始终路由到同一台后端服务器,这对于需要保持会话状态的应用程序非常重要。

http {upstream backend {sticky cookie srv_id expires=1h domain=.example.com path=/;server backend1.example.com;server backend2.example.com;server backend3.example.com;}
}

2. 健康检查(Health Checks)

Nginx Plus 支持主动健康检查,定期探测后端服务器的状态,并根据结果动态调整负载均衡决策。这意味着如果某台服务器出现故障,Nginx 可以自动将其从服务池中移除。

http {upstream backend {zone backend 64k;server backend1.example.com:8080 max_fails=3 fail_timeout=30s;server backend2.example.com:8080 max_fails=3 fail_timeout=30s;health_check;}server {location / {proxy_pass http://backend;}}
}

3. 慢启动(Slow Start)

当一台服务器从故障中恢复或新加入集群时,直接接受全部流量可能会导致过载。Nginx Plus 支持慢启动功能,逐渐增加对该服务器的请求量,直到达到正常水平。

upstream backend {zone backend 64k;server backend1.example.com slow_start=30s;server backend2.example.com slow_start=30s;
}

4. 响应时间加权负载均衡

Nginx Plus 可以根据每个服务器的平均响应时间动态调整负载分配,优先选择响应更快的服务器。

upstream backend {zone backend 64k;least_time header; // 根据响应头接收完成的时间server backend1.example.com;server backend2.example.com;
}

least_time 支持不同的参数如 last_byte, first_byte, header 等来定义如何计算响应时间。

5. 自定义负载均衡算法

通过使用 Lua 脚本或其他扩展模块,可以实现自定义的负载均衡逻辑。例如,可以根据特定业务规则(如地理位置、用户类型等)决定如何分发请求。

6. 缓存

Nginx 可以作为反向代理的同时也充当静态内容缓存的角色,减少对后端服务器的压力并加速页面加载速度。

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_pass http://backend;}
}

7. 限流与速率限制

为了防止恶意攻击或过度使用资源,Nginx 提供了多种限流机制,包括基于 IP 地址、令牌桶算法等方法限制客户端的请求速率。

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;server {location /search/ {limit_req zone=one burst=5 nodelay;proxy_pass http://backend;}
}

8. SSL/TLS 终止

Nginx 可以在前端处理所有 SSL/TLS 加密和解密操作,减轻后端服务器的工作负担,同时还可以提供 HTTP/2 支持等功能。

server {listen 443 ssl http2;ssl_certificate     /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;location / {proxy_pass http://backend;}
}

这些高级特性使得 Nginx 成为构建高性能、高可用性的 Web 应用和服务的理想选择。根据具体需求选择合适的配置选项,可以帮助你优化系统性能,提高用户体验。如果你有特定场景下的问题或需要进一步的帮助,请随时提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91016.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91016.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91016.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析

一、背景引入:从“人工整理”到“自动化处理”的转变 在英语学习过程中,我们经常会接触各种分组整理的词汇表,比如“Group1”对应一组单词及释义,随后是“Group2”、“Group3”等等。如果你下载了一个 .txt 格式的四级词汇表&…

Ffmpeg滤镜

打开设备 添加滤镜 循环录制文件 #include "libavdevice/avdevice.h" #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" #include "libavfilter/buffersink.h" #incl…

HarmonyOS AI辅助编程工具(CodeGenie)UI生成

UI Generator基于BitFun Platform AI能力平台,用于快速生成可编译、可运行的HarmonyOS UI工程,支持基于已有UI布局文件(XML),快速生成对应的HarmonyOS UI代码,其中包含HarmonyOS基础工程、页面布局、组件及…

【第三节】ubuntu server配置远程连接

首先在ubuntu server中查看ip,打开虚拟机,输入ip addr show ,这个命令很好记,几乎就是英文自然语言 下面我们准备远程连接工具,我选择的开源的ET,全称是electerm,圈起来的是必须输入的内容,输入完成后点击保…

CCS-MSPM0G3507-7-模块篇-MPU6050的基本使用

前言本篇我们接收对MPU6050的基本使用,获取ID,通过IIC协议获取寄存器的值,至于高级滤波算法,比如卡尔曼滤波,或者上面的,后面再更新基本配置最好选择PA0和PA1,5V开漏然后给上代码MPU6050.c#incl…

spring-ai agent概念

目录agent 概念理解记忆能力工具计划agent 概念理解 agent 智能体,突出智能 大模型的感觉 告诉你怎么做(也不一定正确)不会帮你做 Agent的感觉 直接准确的帮你做完(比如,告诉 AI Agent 帮忙下单一份外卖&#xff0c…

NO.4数据结构数组和矩阵|一维数组|二维数组|对称矩阵|三角矩阵|三对角矩阵|稀疏矩阵

数组的储存 【定义】 数组: 由 n(≥1) 个相同类型的数据元素构成的有限序列, 是线性表的推广。 一旦被定义, 维数和长度就不可再改变, 一般对其只有元素的存取和修改操作。 一维数组 Arr[a0,…,an−1] Arr[…

如何把Arduino IDE中ESP32程序bin文件通过乐鑫flsah_download_tool工具软件下载到ESP32中

目录前言获取Arduino IDE中ESP32程序bin文件flsah_download_tool工具软件下载程序bin文件到ESP32中总结前言 Arduino IDE丰富的驱动库给ESP32的开发带来了很多便利,当我们下载程序的时候,直选选择好ESP32开发板型号和端口号即可下载程序到开发板中&…

2025XYD Summer Camp 7.11 模考

T1TTT 组询问,每组询问给定 n,mn,mn,m,求 (nm)−1⋅∑i1n∑j1mlcm⁡(i,j) (nm)^{-1}\cdot\sum_{i1}^n\sum_{j1}^m\operatorname{lcm}(i,j) (nm)−1⋅i1∑n​j1∑m​lcm(i,j) 对 109710^971097 取模。 T≤20000T\le 20000T≤20000,n,m≤107n,m…

uniapp 微信小程序点击开始倒计时

一、示例 当点击按钮时就开始倒计时代码 <template><view class"sq_box"><button class"button" click"topay">按钮</button><u-modal v-model"modalShow" :show-cancel-button"true" :content&…

【网络】Linux 内核优化实战 - net.netfilter.nf_conntrack_tcp_timeout_established

目录一、核心概念1. **TCP 连接状态跟踪**2. **参数作用**二、默认值与典型场景1. **默认值**2. **典型场景**三、如何调整该参数1. **查看当前值**2. **临时修改&#xff08;重启后失效&#xff09;**3. **永久修改**四、相关参数与配合优化1. **其他 TCP 状态超时参数**2. **…

鸿蒙app 开发中的Record<string,string>的用法和含义

Record<string, string> 在鸿蒙 App 开发中的用法在 TypeScript 中&#xff0c;Record<string, string> 是一个映射类型&#xff08;Mapped Type&#xff09;&#xff0c;用于描述一个对象的结构。在鸿蒙 App 开发中&#xff0c;它常用于定义接口、组件属性或函数参…

Webpack、Vite配置技巧与CI/CD流程搭建全解析

Webpack、Vite配置技巧与CI/CD流程搭建全解析 在现代前端开发中&#xff0c;构建工具配置和自动化部署流程是提升开发效率和项目质量的关键环节。本文将深入探讨Webpack和Vite这两大构建工具的核心配置技巧&#xff0c;并详细介绍CI/CD流程的搭建方法。 一、Webpack核心配置技巧…

输入npm install后发生了什么

一、准备阶段&#xff1a;配置与环境检查读取配置优先级npm install 首先加载多层级的配置&#xff08;优先级从高到低&#xff09;4&#xff1a;项目级 .npmrc用户级 .npmrc&#xff08;如 ~/.npmrc&#xff09;全局 npmrcnpm 内置默认配置可通过 npm config ls -l 查看所有配…

SpringBoot集成Redis、SpringCache

1 Redis介绍 1.1 Redis作为缓存 由于Redis的存取效率非常高,在开发实践中,通常会将一些数据从关系型数据库(例如MySQL)中读取出来,并写入到Redis中,后续当需要访问相关数据时,将优先从Redis中读取所需的数据,以此,可以提高数据的读取效率,并且对一定程度的保护关系型…

静态路由综合配置实验报告

一、实验拓扑二、实验需求1.除了R5的环回地址固定5.5.5.0/24&#xff0c;其他网段基于192.168.1.0/24进行合理划分&#xff1b;2.R1-R4每个路由器存在两个环回接口&#xff0c;模拟PC&#xff0c;地址也在192.168.1.0/24网络内&#xff1b;3.R1-R4不能直接编写到达5.5.5.0/24的…

【一起来学AI大模型】PyTorch DataLoader 实战指南

DataLoader 是 PyTorch 中处理数据的核心组件&#xff0c;它提供了高效的数据加载、批处理和并行处理功能。下面是一个全面的 DataLoader 实战指南&#xff0c;包含代码示例和最佳实践。基础用法&#xff1a;简单数据加载import torch from torch.utils.data import Dataset, D…

SpringBoot单元测试类拿不到bean报空指针异常

原代码package com.atguigu.gulimall.product;import com.aliyun.oss.OSSClient; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; impo…

持续集成 简介环境搭建

1. 持续集成简介 1.1 持续集成的作用 随着互联网的蓬勃发展,软件生命周期模型也经历了几个比较大的阶段,从最初的瀑布模型,到 V 模型,再到现在的敏捷或者 devops,不论哪个阶段,项目从立项到交付几乎都离不开以下几个过程,开发、构建、测试和发布,而且一直都在致力于又…