Nginx 从入门到实践(3)——负载均衡、反向代理、动静分离

Nginx代理服务

Nginx代理服务

  • Nginx代理服务
    • Nginx负载均衡
    • 反向代理
      • 反向代理的用途
    • Nginx配置攻略
    • Nginx动静分离
    • 使用 Nginx 实现四层代理配置
      • 基本介绍
      • 使用 Nginx 实现四层代理配置

Nginx负载均衡

负载均衡(Load Balance)是由多台服务器以对称的方式组成一个服务器集群,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。经过某种负载分管技术,将外部发送来的中央请求均匀分配到对称结构中的某一台服务器上。
 在这里插入图片描述

反向代理

反向代理(Reverse Proxy):与正向代理正好相反,反向代理中的代理服务器,代理的是服务器那端。代理服务器接收客户端请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器的角色。

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。

一句话总结:反向代理,就是代理服务器代理了目标服务器,去和客户端进行交互。

反向代理的用途

隐藏服务器真实 IP
负载均衡
通过缓存加速访问资源
提供安全保障

Nginx配置攻略

vim /usr/local/nginx/conf/nginx.conf 编辑配置文件。

在 http 节点下,添加 upstream 节点。使用 upstream name{} 语法定义一组服务器。

然后在 server 节点的 80 端口下添加下图中的内容。默认情况下,Nginx 是按加权轮询的方式将请求分发到各个服务器,当权重 weight 不指定时,各服务器 weight 相同。关于 Nginx 启动用户的问题请根据自身实际环境进行配置。

 upstream mysvr { 
    server 192.168.10.121:3333;
    server 192.168.10.122:3333;
}
server {
    ....
    location  ~*^.+$ {         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
    }
}

1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB…

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333 backup;  #热备     
}

2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB…

upstream mysvr { 
    server 127.0.0.1:7878;
    server 192.168.10.121:3333;       
}

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB…

upstream mysvr { 
    server 127.0.0.1:7878 weight=1;
    server 192.168.10.121:3333 weight=2;
}

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333;
    ip_hash;
}

5、关于nginx负载均衡配置的几个状态参数讲解。

down,表示当前的server暂时不参与负载均衡。

backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

upstream mysvr { 
    server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
    server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
}

Nginx动静分离

Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成知识单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态请求,Tomcat处理动态请求。

动静分离目的:
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。

动静分离从目前实现方式大致分为两种:

方式一:纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。
方式二:动态和静态文件混合在一起发布,通过nginx分开。通过配置location指定不同的后缀名实现不同的请求转发。

#配置Nginx处理静态图片请求

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            #root /usr/share/nginx/html/img;
            proxy_pass http://192.168.99.116;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            expires 10d;
        }

使用 Nginx 实现四层代理配置

基本介绍

我们在配置 Nginx 代理时,一般配置的都是基于 http 或是 https 协议的代理,也就是应用层。但是有些时候,我们并不想配置这种基于应用层的代理。比如说:我们要代理到数据库上,但是数据库是不支持应用层代理的。

所以,我们并不能像平常那样来配置,不过呢,在 Nginx 1.9.0 版本后,Nginx 便可以通过配置 --with-stream 模块的方式,来实现基于四层的反向代理。比如,我们便可以通过端口代理到端口的方式来访问到数据库。可以通过四层代理,来代理到任何使用到四层协议的服务上,而不仅仅是数据库。

使用 Nginx 实现四层代理配置

yum添加stream

#安装nginx的官方存储库来获取新版本的nginx。
yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-releasecentos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
systemctl status nginx
#安装nginx stream模块相关的依赖项
yum install gcc pcre-devel zlib-devel openssl-devel
#安装nginx stream模块
yum install nginx-mod-stream
#检查nginx的配置文件是否包含stream模块
nginx -V | grep stream
stream {
  upstream test_mysql {
    hash $remote_addr consistent;				# 通过配置一致性 hash 来防止调度异常
    server 192.168.1.1:3306 weight=5 max_fails=3 fail_timeout=30s;
  }
  server {
    listen 10086 so_keepalive=on;				# 开启 TCP 存活探测
    proxy_connect_timeout 10s;					# 连接超时时间
    proxy_timeout 300s;							# 端口保持时间
    proxy_pass test_mysql;
  }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js 数据格式转换,对象转数组,数组转对象

1.对象转数组 // 对象obj转换成数组格式 let obj { orgCode:分局编码, alertId:告警ID, name:告警名称 } let arr [] for(let key in obj) { console.log(11,key,obj[key]); // 定义一个对象,赋值 let o { id: key, // key是obj对象的键值 label: obj[key] …

半小时搞懂STM32面经知识点——系统架构与启动流程

1.Cortex-M系统 1.1系统结构 1.处理器核心: Cortex-M3 2.存储器系统: Flash,SRAM,FSMC等 3.总线接口: 核心通过总线接口与外设设备和存储器进行通信。 总线矩阵:总线矩阵是一种硬件结构,用于连…

减瘦误区、雷点、陷阱和挑战怎么应对

在减瘦过程中,很多肥胖人群都容易踩到坑。比如陷入误区,认为只有短期快速的减调方式方法,才值得尝试,而忽视身体健康;或是踩到雷点,轻信强速方剂或方法,结果身体产生了排斥或根本没效用白花钱&a…

经典文献阅读之--VoxFormer(基于Transformer的3D语义场景补全)

0. 简介 之前了解了很多BEV的相关操作,但是基本上要么是激光和视觉结合,要么是纯视觉完成的2D激光投影这两种,而那种3D Occupancy方法可以利用栅格的方法完成纯视觉占据栅格的生成。《VoxFormer: Sparse Voxel Transformer for Camera-based …

Redis如何避免数据丢失?——RDB

目录 1. RDB机制的配置 2. fork()函数和写时复制(Copy On Write) 什么是Copy On Write 系统fork中使用Copy On Write机制 3. RDB文件结构 RDB文件内容和内容顺序 InfoAuxFields是rdb信息数据 数据库数据 数据 数据存储格式 字符串编码 操作码 4. RDB的2…

Measurement and Analysis of Large-Scale Network File System Workloads——论文泛读

ATC 2008 Paper 分布式元数据论文阅读笔记整理 问题 网络文件系统在当今的数据存储中发挥着越来越重要的作用。使用网络文件系统可以降低管理成本,从多个位置可靠地访问的数据。这些系统的设计通常以对文件系统工作负载和用户行为的理解为指导[12,19&a…

STL——deque容器【双端动态数组】

deque容器的基本概念: 功能:双端数组,可以对头端进行插入删除操作 deque与vector的区别: vector队友头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度会比vecto…

Type-C接口声卡OTG线

随着科技的飞速发展,移动设备已成为我们日常生活中不可或缺的一部分。而在这些设备中,Type-C接口凭借其高速、高效、易用等优点,逐渐成为主流的数据传输和充电接口。与此同时,OTG(On-The-Go)技术的兴起&…

Java刷题-基础篇

目录 题目1:打印1~100内奇数和、偶数和 题目2:计算5的阶乘 题目3:计算 1!2!3!4!5! 的和 题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue 题目5:实现猜数字小…

毕业论文答辩PPT该怎么做?推荐3个ai工具帮你做答辩ppt

在我原本的认知里面,答辩PPT是要包含论文各个章节的,在答辩时需要方方面面都讲到的,什么摘要、文献综述、实证分析、研究结果样样不落。但是,这大错特错! 答辩PPT环节时长一般不超过5分钟,老师想要的答辩P…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(下)

文章目录 一、购物车逻辑1.1 购物车及加减菜1.2 菜品的加减---方案一1.3 菜品的加减---方案二1.4 购物车View完善1.5 清空购物车1.5 购物车数量和价格 二、小结 一、购物车逻辑 1.1 购物车及加减菜 在utils目录下新建CartStore.ets文件,如下: import …

IndexedDB解密:打开Web应用的数据存储之门

欢迎来到我的博客,代码的世界里,每一行都是一个故事 IndexedDB解密:打开Web应用的数据存储之门 前言IndexedDB简介数据库操作数据检索与索引异步操作与事件处理 前言 在Web的世界里,数据就像是一群旅行者,它们来自各个…

AGV混合型电机驱动器|伺服控制器CNS-MI50H系列对电机的要求

混合型电机驱动器 CNS-MI50H系列涵盖CNS-MI50HB-A、CNS-MI50HBN-A、CNS-MI50HDN-A、CNS-MI50HSN-A型号,专为 AGV 舵轮控制需求设计,集成舵轮转向角度控制和驱动电机闭环控制。支持增量式编码器,霍尔传感器, 角度电位计&#xff0c…

利用106短信群发平台能否提升沟通效率?

利用106短信群发平台确实能够显著提升沟通效率,具体体现在以下几个方面: 1.快速传递信息:106短信群发平台能够实现信息的快速传递。一旦设置好发送内容和接收群体,短信便能在瞬间发送至大量用户。这种即时性确保了信息的迅速传达…

Linux开发--Bootloader应用分析

Bootloader应用分析 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 引导加载程序。包括固化在固件( firmware )中的 boot 代码(可选),和 Boot Loader 两大部分。 Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件系统…

idea-自我快捷键-2

1. 书签 创建书签: 创建书签:F11创建特色标记书签:Ctrl F11快速添加助记符书签:ctrl shift 数字键 查看书签: shift F11快速定位到助记符书签:Ctrl 数字键 删除书签: delete 2. 自动…

2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Science 中国延吉 | 2024年9月27-29日 投稿截止日期:2023年7月15日 收录检索:EI Compendex和Sc…

Remix Client/Server 架构

Remix 框架是服务端渲染架构,当路由请求时生成 HTML 并返回浏览器。这种 SSR 是如何实现的呢?如果不使用 Remix 这种框架,可以在服务器段启动一个无头浏览器进行页面渲染并返回,代价就是要在服务器上启动一个 Chrome 服务&#xf…

微信小程序按钮去除边框线

通常我们去掉按钮边框直接设置 border:0 但是在小程序中无效,设置outline:none也没用,当然可能你会说加权重无效 实际上该样式是在伪元素::after内,主要你检查css 还看不到有这个关系,鹅厂就是坑多 类样式::after {border: non…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第3章 Ubuntu20.04系统设置

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…