Nginx简介

news2024/11/24 13:54:19

一、什么是Nginx?

Nginx是一个高性能的HTTP和反向代理Web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3/SMTP)代理服务器。Nginx的特点是:占有内存少,并发能力强。

Nginx专门为性能优化而开发,性能是最重要的考量,非常注重效率,事实上Nginx的并发能力在同类型的网页服务器种表现较好,能够支持高达50000个并发连接响应数。

二、Nginx相关概念

① 代理(正向代理、反向代理)

Ⅰ、正向代理

概念:正向代理,意思是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问,这个过程就是正向代理。

Ⅱ、反向代理

概念:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。

反向代理,其实对于客户端来说,对代理是无感知的,因为客户端不需要任何配置就可以访问。

过程:反向代理时,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,将数据返回给客户端,此时反向代理服务器和目标服务器在外界看来就是一个服务器,暴露的是代理服务器,隐藏了真实服务器的IP地址。

端口号为5173的反向代理服务器根据客户端的请求,将请求转发到目标服务器的Tomcat中,但是在这个过程中,客户端直接访问的是端口号为5173的反向代理服务器,而不是Tomcat服务器,所以对外暴露的是反向代理服务器,而真正的内部服务器是端口号为8080的Tomcat。从客户端来看,客户端并不知道有反向代理服务器的存在,所以在外部看来,反向代理服务器5173和Tomcat服务器8080好像是一个服务器,也就是对外就是一个服务器。

② 负载均衡

概念:负载均衡其意思就是分摊到多个操作单元上进行执行,从而共同完成工作任务。

客户端发送请求到服务器,服务器处理请求,与数据库交互,服务区处理完成后,将结果响应给客户端。

这是一个请求的正常流程,但是当今信息量不断增加,如果还是依靠于这种架构模式,就会产生很多问题,那么该如何解决?

我们首先想到的是提高服务器、数据库的配置,但是硬件提升也不是无限度的,所以我们可能需要另辟蹊径来解决。既然单个服务器解决不了,那么我们就增加服务器的数量,然后将各个不同的请求分发到各个服务器上,减少一个服务器的请求数,将负载(请求)分发到不同服务器上,也就是我们所说的负载均衡。

客户端发送N条请求,上面我们了解到Nginx可以做反向代理,所以在这里,用户请求可以通过反向代理服务器,将N条请求平均分发到不同的服务器,不同端口号的服务器会得到反向代理服务器分发到不同请求信息进行处理。(当然,不同服务器处理的请求数量需要根据实际情况来定,均分处理请求是理想情况)

负载均衡的分配策略

Ⅰ、轮询策略(负载均衡默认的分配策略)

将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。如果后端有服务器宕机了,就会自动剔除。

upstream myserver {
    server 192.168.220.120:8080;
    server 192.168.220.120:8081;
}

Ⅱ、weight策略(权重策略)

简而言之,就是当weight(权重)越高时,被分配的用户请求就会越多。

upstream myserver {
    server 192.168.220.120:8080 weight=1;
    server 192.168.220.120:8081 weight=5;
}

Ⅲ、ip_hash策略

每个请求访问会根据ip地址的hash结果进行分配,这样每个用户就会固定访问一个后端服务器,也就是只要用户的ip地址不发生改变,那会对应后续访问的后端服务器就不会发生变化,可以解决session的问题。

upstream myserver {
    ip_hash;
    server 192.168.220.120:8080;
    server 192.168.220.120:8081;
}

Ⅳ、fair策略(第三方)

按后端服务器的响应时间来分配,响应时间短的优先分配。比如,当客户端发出请求后,Nginx负载均衡,转发请求到后端服务器中,后端服务器后很多(比如:A服务器、B服务器……等等),其中如果B服务器响应速度最快,也就是响应时间最短,那么就会将请求转发给B服务器。

upstream myserver {
    server 192.168.220.120:8080;
    server 192.168.220.120:8081;
    fair;
}

③ 动静分离

概念:动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。

动静分离可以加快网站的解析速度,把动态页面和静态页面交由不同的服务器来解析,加快了解析速度,同时也降低了原来单个服务器的压力。

最初,我们在项目加载时,会将动态、静态资源全部加载到Tomcat服务器中(这里用Tomcat举例),这无疑会增加Tomcat服务器的运行压力。

所以,我们想出来一种方式,来减小服务器的压力,也就是动静分离。

此时,我们会将动态资源放入到Tomcat服务器中,将静态资源放到静态资源服务器中,如果客户端请求动态或静态资源,那么反向代理服务器就会向Tomcat服务器或者静态资源服务器中分别分发请求,同时也减轻了服务器的压力。我们可以看到,动静分离是将动态请求与静态请求分开,不能简单的理解为只是将动态页面和静态页面分离开。

实现动静分离的两种方式

① 把静态文件独立成单独的域名,放在独立的服务器上。(目前主流)

② 把静态文件和动态文件混合放在一起,通过Nginx来去分开。

④ 高可用

通过上面相关概念的分析,我们可以看到Nginx服务器有很多好处(我们这里用Tomcat举例),Tomcat如果宕机后,Nginx会做出相应的反应,但是如果Nginx宕机了,此时用户发送请求,是无法收到响应的,我们这时该怎么办?

我们此时就需要配置成一个高可用的效果,那么什么是高可用?也就是如果Nginx宕机后,用户的请求不会受到影响,仍然可以正常使用,这就是高可用。高可用的效果是怎样的呢?

我们此时会有一台Nginx的主服务器,和一台Nginx的备份务器,一般情况下,当主服务器正常运行时,用户请求会经过主服务器分发请求到各个服务器上。但是当主服务器宕机后,这时就会自动切换到备份服务器,通过备份服务器来完成用户的请求,此时,备份服务器作为主服务器来完成用户请求,这就是高可用的一个效果。我们实现这个过程,需要用到一个软件,叫做keepalived,它会通过脚本来进行检测Nginx服务器是否还存活,如果宕机了,就会自动切换到备份服务器。但是,我们可以看到一个问题,不同的Nginx服务器的ip是不同的,所以我们此时需要对外提供虚拟ip,将虚拟ip绑定到两台Nginx服务器上,keepalived在这个过程中起到一个路由的作用。也就是说,keepalived在这个过程中会检测是否存活,如果主服务器宕机后,keepalived会将虚拟ip绑定到备份服务器中,所以,总的来说,作为用户,都是通过这个虚拟ip来进行的访问。(主服务器以及备份服务器都需要keepalived)

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

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

相关文章

JJWT实现令牌Token

登录实现方式 Session 详情: https://www.cnblogs.com/andy-zhou/p/5360107.html 会话的概念 会话就好比打电话,一次通话可以理解为一次会话。我们登录一个网站,在一个网站上不同的页面浏览,最后退出这个网站,也是…

【Java AWT 图形界面编程】Container 容器 ② ( Frame 窗口示例 | Panel 示例 | 窗口中文乱码处理 )

文章目录一、Frame 窗口示例二、Panel 示例三、窗口中文乱码处理一、Frame 窗口示例 首先 , 创建 Frame 实例对象 , 该对象就是 操作系统中应用软件的 窗口 ; // 1. 创建窗口 Frame frame new Frame("AWT 图形界面编程");Frame 是 Window 的子类 , public class F…

前端号外—2022年最受欢迎居然是它,Node.js危已

导读 | 2022年是艰难的一年,不仅有互联网的寒冬、还有新冠疫情的洗礼。但是似乎这一切都阻挡不了JavaScript的内卷,一年不长不短的时间中,JavaScript从创新、性能、功能等多维度深度进化,给前端带来了诸多惊喜。本文基于github上流…

仓库管理系统demo搭建指南

1、简介 1.1、案例简介 本文将介绍,如何搭建云进销存-仓库管理。 1.2、应用场景 云进销存-仓库管理应用分仓管理并提供灵活的库存计算方式及库存预警。 2、设置方法 2.1、表单搭建 1)新建表单【商品管理】,字段设置如下: …

TensorFlow笔记之神经网络完成多分类任务

文章目录前言一、数据集调用二、Tensorflow1.x1.单隐藏层2.模型保存与调用三、Tensorflow2.x1.全连接层类2.keras建模总结前言 对TensorFlow笔记之单神经元完成多分类任务进行修改,在tf1.x与tf2.x中使用神经网络完成手写体数字识别多分类任务。 一、数据集调用 数…

10、Javaweb_Cookkie会话Session修改IDEA代码模板

修改IDEA代码模板 选择Setting... 找到要修改的代码模板,点击ok修改即可 使用模板创建方法 ,点击文件包,右键New选择文件类型 点击ok即可 创建完成 会话技术 1. 会话:一次会话中包含多次请求和响应。 * 一次会话:浏览器第一次给服务器资…

JAVA开发(web常见安全漏洞以及修复建议)

web安全常见漏洞修复建议:SQL注入规避 代码层最佳防御sql漏洞方案:使用预编译sql语句查询和绑定变量。(1)使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询…

92、【树与二叉树】leetcode ——222. 完全二叉树的节点个数:普通二叉树求法+完全二叉树性质求法(C++版本)

题目描述 原题链接:222. 完全二叉树的节点个数 解题思路 1、普通二叉树节点个数求法 (1)迭代:层序遍历BFS 遍历一层获取一层结点 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode …

华为交换机、路由器设备批量配置端口方法步骤

华为交换机、路由器批量配置端口方法步骤 在现实工作中,如果要对多个端口做同样的配置,每个接口逐一进行相同的配置,很容易出错,而且造成大量重复工作。 配置端口组功能就可以解决这个问题啦。 你只需要将这些以太网接口加入同一…

HTML学习笔记(全)

HTML 文章目录HTML第一章——HTML 基础认识1. 1 基础补充1.1.1 网页组成1.1.2 代码如何转换成网页1.1.3 渲染引擎(了解)1.1.4 web 标准1.2 HTML 基础认知1. HTML的概念2. HTML页面固定结构3. **标签说明:**第二章——HTML基础语法2.1——注释…

国产linux操作系统——麒麟操作系统的来龙去脉

文章目录1、linux操作系统2、国产操作系统3、麒麟操作系统4、引用1、linux操作系统 目前市场主流的linux操作系统分类大致如此,国产操作系统的麒麟操作系统,底层比较杂,所以单独一类。 2、国产操作系统 排名日期截止到2022 这里提一下排名第…

科技云报道:从re:Invent 2022读懂亚马逊云科技的“生态棋局”

科技云报道原创。 懂棋的人都知道,下棋靠的是智力的角逐,也是气度的较量。 到了云计算发展的新时期,下棋的“人”已经变了,单靠一个人的智力解决不了N个用户的N种问题。 因此,近年来头部云厂商纷纷加大了对合作伙伴生…

centos7:jenkins+nodejs前端自动化部署

系统:centos7 nodejs版本:v16.18.1 npm版本:8.19.2 由于centos7最大只支持16.18.1版本,尽量让前端写代码时使用这个版本,linux系统如果要装高版本的node需要安装glibc库,很危险,尽量不要操作。 jenkin…

Hudi系列6:使用pyspark操作Hudi

文章目录前言一. pyspark连接hudi二. 创建表三. 插入数据四. 查询数据五. Time Travel查询六. 更新数据七. 增量查询八. 基于时间点查询九. 删除数据9.1 软删除9.2 硬删除十. 插入覆盖十一. Spark其它命令11.1 Alter Table11.2 Partition SQL Command参考:前言 软件版本Python…

低成本MEMS惯导系统的捷联惯导解算MATLAB仿真

低成本MEMS惯导系统的捷联惯导解算MATLAB仿真一、姿态角转换为四元数二、四元数转换为姿态角三、反对称阵四、位置更新五、姿态更新六、程序及数据主程序:子程序:数据及完整程序之前将高成本的捷联惯导忽略地球自转、圆锥曲线运动以及划桨运动等化简为可…

【学习笔记之Linux】工具之make/Makefile与git

make/Makefile: 背景知识: 一个工程中的源文件不计数,按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,那些文件需要重新编…

电源《龙珠超:超级人造人》观后感

上周看了动画电影《龙珠超:超级人造人》,《龙珠》这个系列同《火影》、《死神》、《海贼王》和《名侦探柯南》等都存在了很长时间,不断在更新,都是非常好的IP,伴随着很多人走过童年,也是因为时间太长了,记得…

品牌打假,假货治理,有什么好的方法

品牌打假,清除渠道假货,可以提高消费者对品牌的满意度与忠诚度,增强经销商的经销信心,维护稳定的价格体系及经销体系,树立良好的品牌形象。 但是品牌在打假的过程中,由于经验、时间、方法、技术等方面的局…

测试开发 | 接口测试之HTTP 协议讲解

本文节选自霍格沃兹测试开发学社内部教材HTTP 协议是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。客户端向服务端发送 HTTP 请求,服务端则会在响应中返回所请求的数据。了解了 HTTP 协议,才能对接口测试进行更…

sql实现字段分割一行转多行的示例代码

先看一下数据结构,我这里字段比较少,只弄了最重要的部分 根据我们上次学到的LEFT()函数进行分组 SELECT LEFT(provinces,6),COUNT(1) FROM region_map_copy GROUP BY LEFT(provinces,6) 得到的结果如下: 这样的效果并不是我们想要的&#x…