nginx反向代理动静分离和负载均衡

news2025/1/21 21:51:48

一.nginx 反向代理简要介绍

1.什么是反向代理

反向代理是一种服务器,在这种设置中,代理服务器接收客户端的请求,并将这些请求转发给一个或多个后端服务器(例如应用服务器、数据库服务器等)。然后,后端服务器处理这些请求并将响应返回给代理服务器,代理服务器再将响应传递给客户端。

2.nginx作为反向代理的优势

  1. 负载均衡:Nginx 可以在多个后端服务器之间分发客户端请求,从而平衡负载,防止单一服务器过载。
  2. 缓存:Nginx 可以缓存静态内容和动态内容,加速响应时间并减少对后端服务器的压力。
  3. 安全性:通过隐藏后端服务器的真实 IP 地址,提高了系统的安全性。
  4. SSL 终止:Nginx 可以处理 SSL/TLS 加密,减轻后端服务器的负载。
  5. 健康检查:Nginx 可以自动检查后端服务器的健康状态,并将请求路由到健康的服务器上。

3.关键指令说明

  • upstream:定义一个名为 backend 的上游服务器组,这里包含了两个后端服务器 backend1.example.com 和 backend2.example.com
  • server:定义一个虚拟主机,这里监听 80 端口,并且处理 www.example.com 的请求。
  • location /:处理所有根路径下的请求。
    • proxy_pass:指定请求应被转发到上游服务器组 backend
    • proxy_set_header:设置一些头信息,例如原始的 Host 字段、客户端的真实 IP 地址 (X-Real-IP),以及代理链 (X-Forwarded-For) 等。

4.负载均衡策略

Nginx 支持多种负载均衡策略,如:

  • 轮询 (Round Robin):默认策略,将请求依次分发到每个后端服务器。
  • 权重 (Weight):根据配置的权重值来分发请求。
  • IP 哈希 (IP Hash):基于客户端 IP 地址进行哈希,每个 IP 地址固定分配到某个后端服务器。
  • 最少连接 (Least Connections):将请求分发到当前连接数最少的服务器。

5.反向代理模块

ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理     7层代理  
ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组      负载均衡 
ngx_stream_proxy_module:#将客户端的请求以tcp协议转发至指定服务器处理    4层代理
ngx_http_fastcgi_module:#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理

6.反向代理配置参数

Module ngx_http_proxy_module官方文档

7.指令语法

Syntax:    proxy_pass URL;
Default:    —
Context:    location, if in location, limit_except

proxy_pass; 
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持

8.示例

在192.168.240.10上编写子配置文件

yum安装子配置文件路径/usr/local/nginx/conf.d/(conf.d需要创建)

在另一台主机192.168.240.11上安装http服务,新建一个网页

在真机上访问192.168.240.10

二.nginx动静分离简要介绍

Nginx 动静分离是一种常见的性能优化技术,它将处理静态资源和动态请求的责任分配给不同的服务器或者服务进程,以提高网站的性能和吞吐量。下面是一个简要介绍:

  1. 静态资源和动态请求: 在网站中,通常有两种类型的请求:静态资源请求和动态请求。静态资源包括图片、CSS 文件、JavaScript 文件等,它们的内容在请求时不会改变。而动态请求则是由服务器生成的动态内容,如 PHP、Python、Java 等后端语言生成的页面。

  2. 传统架构的问题: 在传统的架构中,静态资源和动态请求都由同一个服务器处理。但是这样会导致服务器负载过高,因为动态请求通常需要更多的计算和数据库访问。此外,每个请求都会占用服务器的线程或进程,限制了并发处理能力。

  3. 动静分离原理: 动静分离通过将静态资源交给专门的服务器或者服务进程来处理,从而减轻动态请求对主服务器的压力。通常,Nginx 作为反向代理服务器,可以配置多个反向代理规则,将静态资源的请求转发给专门的静态资源服务器,而动态请求则继续由主服务器处理。

  4. 优势和好处: 动静分离的优势在于提高了网站的性能和可扩展性。静态资源可以被缓存,减少了服务器的访问次数,加快了页面加载速度;而动态请求则可以由专门的后端服务器处理,提高了并发处理能力和响应速度。

示例:

1.在代理服务器192.168.240.10上编写子配置文件

vim   /usr/local/nginx/conf.d/djfl.conf

2.在192.168.240.11和192.168.240.13真实服务器上安装nginx服务,制作网页

访问192.168.240.10

在/usr/share/nginx/html下

curl 192.168.240.10/api  -L
curl 192.168.240.10/static  -L

三.负载均衡

1. 基本概念

Nginx负载均衡通过将客户端请求分发到多个后端服务器(upstream servers),从而提高系统的响应速度和可靠性。

2. 配置示例

http {

upstream backend {

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

server {

listen 80;

location / {

proxy_pass http://backend;

         }

     }

}

在上述示例中,upstream块定义了一个名为backend的服务器组,其中包含三个后端服务器。proxy_pass指令用于将请求转发到该服务器组。

3. 负载均衡算法

Nginx支持多种负载均衡算法,包括:

  • 轮询(Round Robin):默认算法,按顺序将请求分配给每个后端服务器。

  • 加权轮询(Weighted Round Robin):可以根据服务器的权重来分配请求,例如:

upstream backend { 
server backend1.example.com weight=3; 
server backend2.example.com weight=1; 
}
  • 最少连接数(Least Connections):将请求分配给当前处理连接数最少的服务器。

upstream backend { 
least_conn; 
server backend1.example.com; 
server backend2.example.com; 
}
  • IP哈希(IP Hash):根据客户端IP地址来分配请求,使同一个IP地址的请求总是被分配到同一台后端服务器。

    upstream backend {
    ip_hash; 
    server backend1.example.com; 
    server backend2.example.com; 
    }

4. 健康检查

Nginx Plus(商业版)提供高级的健康检查功能,但开源版本也可以通过一些第三方模块或自定义脚本来实现基本的健康检查。例如,可以使用proxy_next_upstream指令处理后端服务器故障:

http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
} 
server { listen 80;
location / { 
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_pass http://backend; 
        } 
    } 
}

5.会话保持

Nginx支持会话保持(Session Persistence),确保用户的请求被分配到同一台后端服务器。可以通过sticky模块实现,该模块需要第三方插件支持:

upstream backend {
 sticky;
server backend1.example.com; 
server backend2.example.com; 
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer预测 | 基于Transformer+LSTM股票价格预测时间序列预测(Pytorch)

效果一览 基本介绍 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量地进行衡量。但如今,借助于机器学习,可以通过搭建网络,学习一定规模的股…

Unity URP下通过相机让部分Render不受后处理渲染

我们有时候不想某些对象受到后处理影响,找到了这样一个决绝办法,通过增加一个Overlay相机只照射这个模型来实现,下面看看如何实现。 第一步 首先我们拖一个测试场景,有如下一些元素 一个盒子,以后后处理&#xff0c…

海思SS928/SD3403开发笔记1——使用串口调试开发板

该板子使用串口可以调试,下面是win11 调试 该板子步骤 1、给板子接入鼠标、键盘、usb转串口 2、下载SecureCRT,并科学使用 下载地址: 链接:https://pan.baidu.com/s/11dIkZVstvHQUhE8uS1YO0Q 提取码:vinv 3、安装c…

计算机毕业设计Python+Flask弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 人工智能 NLP文本分类 数据可视化 大数据毕业设计

首先安装需要的python库, 安装完之后利用navicat导入数据库文件bili100.sql到mysql中, 再在pycharm编译器中连接mysql数据库,并在设置文件中将密码修改成你的数据库密码。最后运行app.py,打开链接,即可运行。 B站爬虫数…

Springboot整合Kafka消息队列服务实例

一、Kafka相关概念 1、关于Kafka的描述 Kafka是由Apache开源,具有分布式、分区的、多副本的、多订阅者,基于Zookeeper协调的分布式处理平台,由Scala和Java语言编写。通常用来搜集用户在应用服务中产生的动作日志数据,并高速的处…

创建Docker容器与外部机通信(独立IP的方式)

需求:希望外部可以直接通过不同IP地址访问宿主机上的Docker容器,而不需要端口映射(同一个IP不同的端口与外部通讯),这通常涉及到在宿主机的网络层面进行更高级的配置,比如使用IP伪装(IP masquer…

前端网站(二)-- 菜单页面【附源码直接可用】

菜单页面 开篇(请大家看完):此网站写给挚爱,后续页面还会慢慢更新,大家敬请期待~ ~ ~ 轻舟所编写这个前端框架的设计初衷,纯粹是为了哄对象开心。除此之外,并无其它任何用途或目的。 此前端框…

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-04-边缘计算

文章目录 1. 概述1.1 简介1.2 三类落地形态1.2.1 云边缘1.2.2 边缘云1.2.3 云化网关 2. 边缘计算的特点2.1 联接性2.2 数据第一入口2.3 约束性2.4 分布性 3. 边云协同3.1 概述3.2 六种协同3.2.1 资源协同3.2.2 数据协同3.2.3 智能协同3.2.4 应用管理协同3.2.5 业务管理协同3.2.…

STM32单片机USART串口详解

文章目录 1. 通信接口概述 2. 串口通信 3. 硬件电路 4. 电平标准 5. 串口参数及时序 5.1 数据帧的组成 5.2 起始位 5.3 数据位 5.4 校验位 5.5 停止位 5.6 波特率 5.7 数据帧传输过程示例 6. 串口时序 7. USART概述 8. USART框图 9. USART基本结构 10. 数据帧…

Java | Leetcode Java题解之第146题LRU缓存

题目&#xff1a; 题解&#xff1a; public class LRUCache {class DLinkedNode {int key;int value;DLinkedNode prev;DLinkedNode next;public DLinkedNode() {}public DLinkedNode(int _key, int _value) {key _key; value _value;}}private Map<Integer, DLinkedNode…

UE4_材质_雨滴涟漪效果ripple effect_ben教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 雨水落下时会产生这些非常漂亮的同心环波纹&#xff0c;我们要做的第一件事是创建一个单个的圆环遮罩动画&#xff0c;我们希望环在开始的时候在中心很小&#xff0c;然后放大&…

45岁TVB女星惊爆与大15岁老公离婚

45岁的姚嘉妮今日被传媒爆出与结婚18年老公林祖辉离婚&#xff0c;她接受其他传媒访问时&#xff0c;指两人分开不涉及第三者&#xff0c;而一对子女亦会共同抚养&#xff0c;而更令人惊讶的是&#xff0c;两人已经离婚多年&#xff0c;女方形容大家现在关系为家人。 不过9年前…

MBR40100CT-ASEMI无人机专用MBR40100CT

编辑&#xff1a;ll MBR40100CT-ASEMI无人机专用MBR40100CT 型号&#xff1a;MBR40100CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;40A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;100V…

深入Node.js:实现网易云音乐数据自动化抓取

随着互联网技术的飞速发展&#xff0c;数据已成为企业和个人获取信息、洞察市场趋势的重要资源。音频数据&#xff0c;尤其是来自流行音乐平台如网易云音乐的数据&#xff0c;因其丰富的用户交互和内容多样性&#xff0c;成为研究用户行为和市场动态的宝贵资料。本文将深入探讨…

maven安装、配置与plugins报红的解决方法

maven安装与配置 1.在官网中下载maven 官网地址&#xff1a;https://maven.apache.org/ 2.解压maven压缩包 将maven解压到一个没有中文的文件夹中&#xff1a; 3.配置环境变量并验证 1、在设置中找到 “高级系统设置”&#xff0c;点击后再点击环境变量&#xff1a; 2、在 “系…

Arcgis导入excel出现的问题

我手动添加了object-id字段也没有用&#xff0c;然后再excel里面又添加了一行&#xff0c;关闭后打开还是不行&#xff0c;额案后在网上看到了一种方法&#xff0c;很有效&#xff0c;予以记录。 1、我的文件是csv格式&#xff0c; 先在excel里面另存为xlsx格式 2、转换工具里…

【植物大战僵尸】C语言教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长

竹叶青茶以其别具一格的风味与深厚的历史底蕴&#xff0c;一直被誉为茶中瑰宝。历经千年的传承与创新&#xff0c;竹叶青不仅坚守着茶叶品质的极致追求&#xff0c;更在数字化的浪潮中&#xff0c;率先打破传统&#xff0c;以科技力量赋能品牌&#xff0c;成为茶行业的领军者。…

深度剖析ElasticSearch分页原理与深分页问题|ES深分页问题|ES分页原理剖析

文章目录 ES分页|Paginate search resultsES深分页的问题一页获取数据量太大&#xff0c;报错分页深度太大&#xff0c;报错官方解释 其他解决方案Search after解决两个问题 有没有深分页查询的必要性&#xff1f;search after & PIT的使用方式1.创建pit2.首次查询3.之后的…

33、循环语句--函数---递归+阶乘

一、函数 1.1、shell的函数 1.1.1、函数的定义&#xff1a;将命令序列按照格式写在一起。格式指的是函数的固定格式。两种格式。 for i in {}do命令序列doneif []then 命令序列else命令序列fi #可以作为一个命令序列作用&#xff1a;方便重复使用&#xff0c;函数库&…