Nginx到底是什么,他能干什么?

Ngnix是什么,它是用来做什么的呢?

一。Nginx简介

Nginx是enginex的简写,是一款很优秀的开源的高性能HTTP和反向代理服务器,由于它是用C语言写的,所以速度非常快,性能非常优秀,它主要功能就是反向代理,负载均衡,配置SSL证书,防盗链,解决跨域问题,缓存,限流,动静资源分离等等

Nginx是一款轻量级的,高性能的代理Web服务器,作为一个很强大的高性能Web和反向代理服务器它具有很多优秀的特性:Nginx更轻巧,处理的并发数更大(Nginx的并发性在同类型的服务其中表现很好)中国用户使用的很多,比如  百度,京东,网易,腾讯,淘宝等互联网大厂,对HTTP并发连接的高处理能力(单台服务器通常可以处理三万到六万个并发请求),单个链接占用的内存小,通常较多用于处理静态页面和反向代理服务。

Nginx和Apache都采用模范化的结构设计,在连接高并发的情况下,Nginx是Apache服务不错的代理品:Apache的下载包很大,而Nginx的下载包很小,现在的版本大概只有几兆的大小,安装非常方便。能支持最大60000个并发连接数,这是他无与伦比的优势。

上面介绍了Nginx是一台Web服务器,实际上,它并不是一台真正意义上的物理服务器,并不是主观真实存在的实体,它是运行在某台服务器(电脑)上的软件。

那为什么还说它是一台Web服务器呢,???

我们先来理解一下什么事网关,大家都知道,从一个房间进入另一个房间内,必须经过一个门,就像经过一个“关口”,那么从一个网络发送一个消息到另一个网络,也必须经过一个关口,这个关口就可以说是网关。这个关口并不是摆在那里那么简单,关口可以自行决定允不允许让你的消息通过,或者决定是否替你转发和接收消息,把消息分发给其他人,或者帮你的消息添加和需处理一些消息,或者替你回答消息等等功能。

而Nginx就相当于这个网关,转发和接收消息就相当于反向代理,把消息分给其他人就相当于负载均衡。当我们的服务器(电脑)上安装了Nginx这个软件,通过一些简单的配置并运行这个软件,我们在服务器上运行的项目(例如java程序)在接收HTTP请求的时候,这个请求就会被Nginx这个网关先拦截,经过一些上述的处理之后再交给Java程序,此时Nginx就充当了一个网关。因为外网用户的所有请求都会先经过Nginx,所以对于外网的用户来说,他们的请求都是发送给Nginx的,再由Nginx发送给java程序处理后再发还给用户,那么从用户的角度来看,Nginx就相当于一台服务器在接收和回复用户发送的消息,所以也可以理解为Nginx是一台Web服务器。

二,为什么要用Nginx呢?

Nginx跨平台,配置简单。我们可以在linux和windows系统上都开启Nginx服务,配置也非常简单,

在linux上,我们通常只需要修改三四行代码,就可以完成项目的配置,当后端程序重构或者重新部署,例如Java项目换成go项目,也不需要修改Nginx。

Nginx是由C语言写的,速度非常快,性能很优越。目前公认的性能最高的后端语言就是C和C++,而Nginx就是由C语言写的和编译的,其单机开发量非常高,可以达到5w+,而一般的后端Java程序并没有这么高的并发量,所以一般都会选择Nginx当网关放在Java程序之前,提高系统的整体性能。

动静资源分离,一般公司的前后端一般静态资源都会放到Nginx分离项目,用户想获取前端静态资源文件,都得先经过后端Java程序的接口再获取服务器上的静态资源文件,这样的效率并不是很高,而且会占用正常程序接口连接数量,这时候Nginx的动静资源分离功能就提供了很好的解决方法,一般的静态资源文件都会放到Nginx服务器中。当Nginx接收到了获取静态资源的请求,就直接在Nginx服务器中把放进去的静态资源返回了,而不用真正到达后端接口,这个效率是非常高的,比正常的访问速度会快一倍左右。

在并发量较大的项目中,后端往往会开启多个相同的Java服务,来缓解单服务的压力,我们知道,每个Java服务程序都会占用一个端口,那前端在后端接口的时候,怎么知道选择哪个接口呢?这个时候就可以在所有的Java程序前放置一个Nginx程序,所有的请求都会经过Nginx,由Nginx决定分发到哪个端口程序上,,虽然后端有很多个Java程序,但对于前端来说,是无感知的,就好像后台只有一个项目再跑。

二。Nginx应用

1.HTTP代理和反向代理

正向代理有点像NAT网络结构,用户通过网关请求访问网站,网关服务器负责和外网服务器对接请求访问并返回结果

而反向代理则是,用代理服务器来接受客户端的访问请求,然后服务器将请求有策略的转发给正在实际工作中的业务服务器,并将从业务服务器的处理的结果,返回给客户端。

 2.负载均衡

负载均衡建立在现有的网络结构之上,他提供了一种廉价有效透明的方法扩展网络设备和服务器的宽带,增加吞吐量,加强网络数据的处理能力,提高网络的灵活性和可用性

它利用一些反向代理功能加算法策略达到我们想要访问的目的

负载均衡的策略主要有:轮询,加权轮询,IP hash

轮询:

假如有三台服务器和三台客户端,第一次访问时,第一个服务器接受请求;第二次访问时,第二台服务器接受请求,第三次访问时,第三台服务器接受请求。。。。以此类推,按次序分配。

加权轮询:

对接受的请求做一个加权分配,配置高的服务器承担的请求多一点,配置低的接受的请求少一点。假如第二台服务器是第一台服务器的两倍,单位时间里,可以让第二台服务器执行两次,第一台执行一次

IP   hash:

是对客户端请求的ip进行hash散列算法操作,然后根据hash结果将同一客户端的ip请求分发给同一台服务器进行处理,可以解决session不共享的问题

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

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

相关文章

FlinkSql 如何实现数据去重?

摘要 很多时候flink消费上游kafka的数据是有重复的,因此有时候我们想数据在落盘之前进行去重,这在实际开发中具有广泛的应用场景,此处不说详细代码,只粘贴相应的flinksql 代码 --********************************************…

SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot&l…

Tortoise Git(乌龟git)常用命令总结

查看全局和本地 Git 配置 打开命令行终端&#xff08;如 Git Bash&#xff09;&#xff0c;分别执行以下命令查看全局和本地的 Git 配置信息&#xff1a; git config --global -l git config --local -l确保配置中没有任何与 SSH 相关的设置 移除全局和本地 SSH 相关配置&…

权限校验中的“双token”方案

1. 双Token中的两个token分别是什么&#xff1f; 1.1 access_token 1.2 fresh_token 2. 为什么需要双token&#xff1f;一个token不行吗&#xff1f; 答&#xff1a; 两个token的职责不同。其中&#xff0c;access_token是在每次请求的时候携带给后端进行权限校验&#xff…

DOCKER 部署 webman项目

# 设置基础镜像 FROM php:8.2-fpm# 安装必要的软件包和依赖项 RUN apt-get update && apt-get install -y \nginx \libzip-dev \libpng-dev \libjpeg-dev \libfreetype6-dev \&& rm -rf /var/lib/apt/lists/*# 安装 PHP 扩展 RUN docker-php-ext-configure gd …

【nacos】【sentinel】【gateway】docker-compose安装及web项目部署

docker安装 【centos】【docker】安装启动 docker-compose安装 【docker-compose】安装使用 配置文件 version: 2 networks: #自定义网络myapp&#xff0c;为了只有这些服务可以在该网络内相互访问myapp:driver: bridge services: #将容器抽象成服务nacos: #注册中心image…

自学TypeScript-基础、编译、类型

自学TypeScript-基础、编译、类型 TS 编译为 JS类型支持类型注解基础类型typeof 运算符高级类型class 类构造函数和实例方法继承可见性只读 类型兼容性交叉类型泛型泛型约束多个泛型泛型接口泛型类泛型工具 索引签名类型映射类型索引查询(访问)类型 类型声明文件 TypeScript 是…

旋转图片两种方法

这两种方法在旋转图像时&#xff0c;可能会产生一些不同的效果&#xff1a; rotate_image_new()旋转后的图像完全包含旋转前的内容&#xff0c;并且填充边界尽可能小 rotate_image() 保持原始图像的大小&#xff0c;并根据填充选项决定是否填充边界为白色。如果 if_fill_whit…

ssh访问远程宿主机的VMWare中NAT模式下的虚拟机

ssh访问远程宿主机的VMWare中NAT模式下的虚拟机 1.虚拟机端配置 1.1设置虚拟机的网络为NAT模式 1.2设置虚拟网络端口映射(NAT) 点击主菜单的编辑-虚拟网络编辑器&#xff1a; 启动如下对话框&#xff0c;选中NAT模式的菜单项&#xff0c;并点击NAT设置&#xff1a; 点击添…

计算机毕设 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&a…

WSL Opencv with_ffmpeg conan1.60.0

我是ubuntu18. self.options[“opencv”].with_ffmpeg True 关键是gcc版本需要conan支持&#xff0c;比如我的是&#xff1a; compilergcc compiler.version7.5 此外还需要安装系统所需库&#xff1a; https://qq742971636.blog.csdn.net/article/details/132559789 甚至来…

宏基官网下载的驱动怎么安装(宏基笔记本如何安装系统)

本文为大家介绍宏基官网下载的驱动怎么安装宏基笔记本驱动(宏基笔记本如何安装系统)&#xff0c;下面和小编一起看看详细内容吧。 宏碁笔记本怎么一键更新驱动 1. 单击“开始”&#xff0c;然后选择“所有程序”。 2. 单击Acer&#xff0c;然后单击Acer eRecovery Management。…

ChatGPT 制作可视化柱形图突出显示第1名与最后1名

对比分析柱形图的用法。在图表中显示最大值与最小值。 像这样的动态图表的展示只需要给ChatGPT,AIGC,OpenAI 发送一个指令就可以了, 人工智能会快速的写出HTML与JS代码来实现。 请使用HTML,JS,Echarts完成一个对比分析柱形图,在图表中突出显示第1名和最后1名用单独一种不…

Vue 项目性能优化 — 实践指南

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术&#xff0c;帮我们处理了前端开发中最脏最累的 DOM 操作部分&#xff0c; 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM&#xff1b;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题&#xff0c;所…

leetcode分类刷题:哈希表(Hash Table)(一、数组交集问题)

1、当需要快速判断某元素是否出现在序列中时&#xff0c;就要用到哈希表了。 2、本文针对的总结题型为给定两个及多个数组&#xff0c;求解它们的交集。接下来&#xff0c;按照由浅入深层层递进的顺序总结以下几道题目。 3、以下题目需要共同注意的是&#xff1a;对于两个数组&…

idea查找maven所有依赖

文章目录 idea自带的依赖结构图idea安装maven helper插件 idea自带的依赖结构图 缺点是只有依赖&#xff0c;没有版本 idea安装maven helper插件 settings–>plugins–>搜索maven helper并安装 安装后打开pom.xml文件会有依赖解析 勾选conflict就是有冲突的依赖选中…

(笔记三)opencv图像基础操作

强调&#xff1a;本文只为学习记录做笔记 详细可参考opencv官网 &#xff1a;https://docs.opencv.org/4.1.1/d0/d86/tutorial_py_image_arithmetics.html &#xff08;1&#xff09;将cv2的BGR模式改为RGB模式 #!/usr/bin/env python # -*- coding:utf-8 -*- ""&q…

springboot中使用ElasticSearch

引入依赖 修改我们的pom.xml&#xff0c;加入spring-boot-starter-data-elasticsearch <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>编写配…

React 项目中引入msal验证以及部分报错处理

功能实现 如何在React 项目中引入msal身份验证&#xff0c; 微软在官网有提供文档支持&#xff0c;文档包含示例和具体使用的教程&#xff0c;地址如下&#xff1a; https://learn.microsoft.com/zh-cn/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal 照着文…

TP DP PP 并行训练方法介绍

这里写目录标题 张量并行TP流水线并行 PPnaive模型并行GPipePipeDream 数据并行DPFSDP 张量并行TP 挖坑 流水线并行 PP 经典的流水线并行范式有Google推出的Gpipe&#xff0c;和微软推出的PipeDream。两者的推出时间都在2019年左右&#xff0c;大体设计框架一致。主要差别为…