初始Nginx(基本概念)

目录

一、Nginx的概念

二、Nginx常用功能

1、HTTP(正向)代理,反向代理

1.1正向代理

1.2 反向代理

2、负载均衡

2.1 轮询法(默认方法)

2.2 weight权重模式(加权轮询)

2.3 ip_hash

3、web缓存

三、基础特性

四、Web 服务相关的功能

五、Nginx进程结构

web请求处理机制

5.1主进程(master process)的功能

5.2 工作进程(worker process)的功能


一、Nginx的概念

  1. Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  2. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  3. Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
  4. Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

二、Nginx常用功能

1、HTTP(正向)代理,反向代理

作为web服务器最常用的功能之一,尤其是反向代理。

1.1正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

  • 简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。
  • 需要在客户端配置代理服务器进行指定网站访问

1.2 反向代理

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

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

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。 

2、负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

Nginx给出来三种关于负载均衡的方式:

2.1 轮询法(默认方法)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

2.2 weight权重模式(加权轮询)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的

情况。

这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

2.3 ip_hash

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3、web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

三、基础特性

nginx具有高并发、高性能,可扩展性好,高可靠性,热部署,内存消耗少,成本低,稳定性高,支持重写机制,BSD许可证等特点

  1. 模块化设计,较好的扩展性
  2. 高可靠性
  3. 支持热部署:不停机更新配置文件,升级版本,更换日志文件
  4. 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
  5. event-driven, aio, mmap,sendfile

四、Web 服务相关的功能

  1. 虚拟主机(server)
  2. 支持 keep-alive 和管道连接(利用一个连接做多次请求)
  3. 访问日志(支持基于日志缓冲提高其性能)
  4. url rewirte
  5. 路径别名
  6. 基于IP及用户的访问控制
  7. 支持速率限制及并发数限制
  8. 重新配置和在线升级而无须中断客户的工作进程

五、Nginx进程结构

web请求处理机制

多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

5.1主进程(master process)的功能

  1. 对外接口:接收外部的操作(信号)
  2. 对内转发:根据外部的操作的不同,通过信号管理 Worker
  3. 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
  4. 读取Nginx 配置文件并验证其有效性和正确性
  5. 建立、绑定和关闭socket连接
  6. 按照配置生成、管理和结束工作进程
  7. 接受外界指令,比如重启、升级及退出服务器等指令
  8. 不中断服务,实现平滑升级,重启服务并应用新的配置
  9. 开启日志文件,获取文件描述符
  10. 不中断服务,实现平滑升级,升级失败进行回滚处理
  11. 编译和处理perl脚本

5.2 工作进程(worker process)的功能

所有 Worker 进程都是平等的

实际处理:网络请求,由 Worker 进程处理

Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,

  1. 增加上下文切换的损耗
  2. 接受处理客户的请求
  3. 将请求依次送入各个功能模块进行处理
  4. I/O调用,获取响应数据
  5. 与后端服务器通信,接收后端服务器的处理结果
  6. 缓存数据,访问缓存索引,查询和调用缓存数据
  7. 发送请求结果,响应客户的请求
  8. 接收主程序指令,比如重启、升级和退出等

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

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

相关文章

【Java前端技术栈】Promise

一、Promise 基本介绍 1. 传统的 Ajax 异步调用在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的Callback Hell 2. 为了解决上述的问题,Promise对象应运而生,在 EMCAScript 2015当中已经成…

云HIS系统源码,基于云计算技术的B/S架构的云HIS系统,二甲医院信息管理系统

云HIS系统源码,采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统,采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能…

lxml库和Xpath提取网页数据的基础与实战:完整指南与实战【第92篇—提取网页】

使用lxml库和Xpath提取网页数据的基础与实战 在网络爬虫和数据抓取中,从网页中提取所需信息是一项常见的任务。lxml库和Xpath是Python中用于解析和提取HTML/XML数据的强大工具。本文将介绍lxml库的基础知识,以及如何使用Xpath表达式来准确地提取网页数据…

CUDA自学笔记001 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

CUDA编程模型 我们使用CUDA_C语言进行CUDA编程, 1,CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2,CUDA编程模型提供了内存访问控制,我们可以实现主机和GPU设备内存的控制,我们可以实现CPU和GPU之间内存的数据传…

Fibonacci 数列与黄金分割【第十届】【省赛】【研究生组】

题目描述 Fibonacci 数列是非常著名的数列: F [ 1 ] 1 , F [ 2 ] 1 F[1]1,F[2]1 F[1]1,F[2]1,对于 i > 3 , F [ i ] F [ i − 1 ] F [ i − 2 ] 。 i>3,F[i]F[i−1]F[i−2]。 i>3,F[i]F[i−1]F[i−2]。…

系列五十二、idea中统一配置生成Java类的作者信息

一、idea中统一配置生成Java类的作者信息 1.1、位置 1.2、脚本 /*** Author : 一叶浮萍归大海* Date: ${DATE} ${TIME}* Model Description: * Description:*/

PowerDesigner:pdm文件与sql文件互相转,数据库类型切换

PowerDesigner 依据sql文件生成pdm file——reverse engineer—— database 依据pdm文件导出sql 选中——database——generate database 切换库类型

【MATLAB GUI】 4. 坐标区和表

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 坐标区表 坐标区 任务要求设计一个图像显示界面,根据选定的周期做出相应的sin函数图像 使用坐标区、弹出式菜单、普通按钮设计页面,弹出式菜单string设置为1、2、3、4代…

LAPACK xgeqr2.f 算法总结推导

以 DGEQR2 函数为例,其分为两步: 先计算Householder vector,调用了 DLARFG( ) 然后实施了Householder 变换,调用了 DLARF( ) 接下来先分析DLARFG( )的算法 源代码如下: *> \brief \b DLARFG generates an e…

Bert基础(一)--自注意力机制

1、简介 当下最先进的深度学习架构之一,Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络,并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

开源软件:塑造软件行业未来的协作与创新之力

随着信息技术的迅猛发展,开源软件已经逐渐成为软件开发的潮流,以其独特的低成本、可协作性和透明度等特性,在全球范围内引起了广泛的关注和应用。越来越多的企业和个人选择使用开源软件,这不仅推动了软件行业的繁荣,还…

Android约束布局中用ConstraintHelper实现过渡动画效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 一.创建一个类CircularRevealHelper继承ConstraintHelper代码如下 /*** Author: ly* Da…

sambamba — samtools 的高效平替工具

sambamba — samtools 的高效平替工具 sambamba 是一个 BAM 文件处理工具。 sambamba 它使用了 D 语言的多线程和异步 IO 特性,实现了高效的并行化处理。sambamba 可以在多核 CPU 上同时运行多个任务,利用硬盘和内存的带宽,提高了处理速度。…

多模态MLLM都是怎么实现的(1)

好多读者私信说想了解一下多模态的内容,我这人最大的优点就是听劝... 好,那么好 , 今天开始陆续写点多模态内容,没想好是不是要写个专栏(因为我之前挖的坑太多...),然而还是开了,今天先写点基础做个seed 有想了解一下多模态扫盲的读者,可以自己先看看这篇论文 2311.131…

代码随想录算法训练营day24|理论基础、77. 组合

理论基础 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure(发音:Ack-sure),代表美国Axure公司;RP则是Rapid Prototyping(快速原型)的缩写。 下载链接:https://www.axure.com/ 下载 可以免费试用…

Javascript数字精度丢失的问题

一、问题 0.1 0.2 0.3 // false 二、浮点数 “浮点数”是一种表示数字的标准,整数也可以用浮点数的格式来存储 我们也可以理解成,浮点数就是小数 在JavaScript中,现在主流的数值类型是Number,而Number采用的是IEEE754规范中…

springboot集成mqtt

文章目录 前言一、MQTT是什么?二、继承步骤1.安装MQTT2.创建项目,引入依赖3. 对应步骤2的代码3 测试 总结mqtt 启动后访问地址 前言 随着物联网的火热,MQTT的应用逐渐增多 曾经也有幸使用过mqtt,今天正好总结下MQTT的使用; 一、MQTT是什么?…

node 之 初步认识

思考:为什么JavaScript可以在浏览器中被执行 代执行的js代码——JavaScript解析引擎 不同的浏览器使用不同的JavaScript解析引擎 Chrome 浏览器 》 V8 Firefox浏览器 》OdinMonkey(奥丁猴) Safri浏览器 》JSCore IE浏览器 》Chakra(查克拉) e…

[VulnHub靶机渗透] HA: Narak

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …