Nginx系列05(负载均衡、动静分离)

embedded/2025/2/28 5:48:25/

目录

Nginx 负载均衡

Nginx 动静分离


Nginx 负载均衡

  • 概念:负载均衡是一种将网络流量分摊到多个后端服务器(节点)上的技术,以提高系统的可用性、性能和可扩展性。通过负载均衡,Nginx 可以根据一定的算法将客户端请求分发到不同的后端服务器,避免单个服务器因负载过高而出现性能瓶颈。
  • 原理:Nginx 通过upstream模块定义一组后端服务器,然后在server块或location块中使用proxy_pass指令将请求代理到upstream定义的服务器组。Nginx 支持多种负载均衡算法,常见的有:
    • 轮询(round - robin):依次将请求分配到后端服务器,每个服务器被选中的机会均等。
    • 加权轮询(weighted round - robin):根据服务器的性能或负载能力,为每个服务器分配一个权重,权重越大的服务器被选中的概率越高。
    • IP 哈希(ip - hash):根据客户端的 IP 地址计算一个哈希值,然后根据哈希值将请求分配到特定的服务器,这样可以确保同一客户端的请求始终被路由到同一台服务器,适用于需要保持会话一致性的场景。
  • 场景示例:假设有 3 台后端 Web 服务器,IP 地址分别为192.168.1.100192.168.1.101192.168.1.102,运行的端口都是8080,通过 Nginx 进行负载均衡配置如下:
http {upstream backend_servers {# 使用轮询算法,默认不写算法就是轮询server 192.168.1.100:8080; server 192.168.1.101:8080; server 192.168.1.102:8080; }server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers; # 将请求代理到upstream定义的后端服务器组proxy_set_header Host $host; # 将客户端请求中的Host头信息传递给后端服务器proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端的真实IP地址,当存在多个代理时,这个头信息会包含多个IP地址proxy_set_header X-Forwarded-Proto $scheme; # 将客户端请求的协议(http或https)传递给后端服务器}}
}

在这个配置中,upstream backend_servers定义了一个名为backend_servers的后端服务器组,包含 3 台服务器。server块中的location /配置将所有请求通过proxy_pass代理到backend_servers服务器组,Nginx 会按照轮询算法将请求依次分发到 3 台后端服务器上。

Nginx 动静分离

  • 概念:动静分离是指将网站的静态资源(如图片、CSS、JavaScript 文件等)和动态资源(如 PHP、JSP 生成的页面,需要服务器动态计算和处理的内容)分开处理和存储。这样可以提高网站的性能和可维护性,因为静态资源可以被缓存,减少服务器的计算压力,而动态资源可以由专门的应用服务器处理。
  • 原理:Nginx 通过配置不同的location块来分别处理静态资源和动态资源请求。对于静态资源请求,Nginx 可以直接从本地文件系统读取并返回,同时可以配置缓存策略来提高访问速度;对于动态资源请求,Nginx 通过proxy_pass将请求转发到后端的应用服务器(如 Tomcat、PHP - FPM 等)进行处理。
  • 场景示例:假设网站的静态资源存放在/var/www/html/static目录,动态资源由运行在127.0.0.1:8080的 Tomcat 服务器处理,配置如下:
http {server {listen 80;server_name example.com;# 处理静态资源请求location /static/ {root /var/www/html; # 静态资源的根目录,结合前面的location路径,实际访问的是/var/www/html/static目录下的文件expires 30d; # 设置静态资源的缓存过期时间为30天,浏览器在30天内再次请求相同资源时,直接从本地缓存读取,减少服务器压力access_log off; # 关闭静态资源的访问日志记录,减少日志文件大小}# 处理动态资源请求location / {proxy_pass http://127.0.0.1:8080; # 将请求转发到后端的Tomcat服务器proxy_set_header Host $host; # 将客户端请求中的Host头信息传递给后端服务器proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端的真实IP地址,当存在多个代理时,这个头信息会包含多个IP地址proxy_set_header X-Forwarded-Proto $scheme; # 将客户端请求的协议(http或https)传递给后端服务器}}
}

在这个配置中,当客户端请求以/static/开头的资源时,Nginx 会直接从/var/www/html/static目录下读取文件并返回,同时设置了缓存过期时间和关闭访问日志。当客户端请求其他资源时,Nginx 会将请求转发到127.0.0.1:8080的 Tomcat 服务器进行处理。


http://www.ppmy.cn/embedded/167728.html

相关文章

WiFi定位:宠物安全的“秘密武器”

从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」,配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模,智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…

VScode中Markdown PDF无法正确输出包含数学公式的pdf解决方案

在使用VScode的Markdown PDF插件时,可能会遇到无法正确输出包含公式的PDF文件的问题。下面为你提供一种有效的解决方案。 具体操作步骤 步骤一:定位模板文件 在安装Markdown PDF插件后,你需要找到对应的模板文件。该文件的路径通常如下&am…

无人机自主导航与避障技术!

自主导航的实现 环境感知:通过传感器(如摄像头、激光雷达、超声波传感器等)获取周围环境信息。 地图构建:利用SLAM(同步定位与地图构建)技术,实时生成环境地图并确定无人机的位置。 路径规划…

字节火山引擎-大模型声音复刻,流式语音合成接口

字节火山引擎-大模型声音复刻,流式语音合成接口 参考文档:火山引擎-大模型声音复刻文档 官网给出的示例代码有bug,这里已经修改了 创建应用 声音复刻大模型页面查看应用,获取接口调用需要的参数 注意调用tts接口时候需要三个参数…

智能测试执行 利用算法 利用图像识别、自然语言处理等技术实现自动化测试执行

以下将从Web应用和移动应用两个方面,给出利用图像识别、自然语言处理等技术实现自动化测试执行的实例,并附上部分代码示例。 Web应用自动化测试实例:模拟用户登录操作测试 需求理解 对于一个Web应用的登录功能进行自动化测试,我们可以结合自然语言处理理解测试用例描述,…

CAS (Compare and swap “比较和交换“) [ Java EE 初阶 ]

目录 什么是 CAS CAS 是怎么实现的 CAS 有哪些应用 1. 实现原子类 2. 实现自旋锁 3. CAS 的 ABA 问题 什么是 CAS // 能够比较和交换某个寄存器中的值和内存中的值, 看是否相等, 如果相等, 则把另一个寄存器中的值和内存中的值进行交换 // CAS伪代码 boolean CAS(addres…

GitHub SSH连接问题解决指南

🔍 GitHub SSH连接问题解决指南 问题描述 遇到错误:ssh: connect to host github.com port 22: Connection refused 说明您的网络环境无法访问GitHub的SSH端口22,常见原因: 防火墙/网络运营商限制(国内常见&#xf…

网络安全 linux学习计划 linux网络安全精要

2.使用命令行 文件系统层次标准(FHS)是一个文件和目录在Unix和Linux操作系统上面应该如何存储的定义。 /bin 重要的二进制可执行程序/boot 与系统启动有关的文件/etc 系统配置文件/home 普通用户家目录/lib 重要的系统库/media 可移动介质的挂载路径/m…