当前位置: 首页 > news >正文

【nginx】

文章目录

  • 概述
    • 主要应用场景
    • nginx核心优势
    • 安装第一个rpm包形式的nginx

概述

一、nginx是一款轻量级的web服务器/反向代理服务器及电子邮件imap/pop3/smtp服务器,在bsd-like协议下发行。其特点是占有内存少,并发能力强。
二、核心应用场景:

  1. 高性能的静态web服务器:只能处理静态资源

静态资源:图片、样式、flash等不会随着用户的请求改变而改变的资源
动态资源:账户余额、商品剩余货源等,这些依赖于后端应用服务器在数据库查询、处理后返回的结果

  1. 反向代理:客户端点击一个网页后,本质上是向nginx发送了一个http/https请求,nginx可以将静态资源返回客户端,虽然nginx无法返回动态资源,但是他可以将请求代理的发送给后端的应用服务器,由应用服务器查询数据库并处理完数据后返回给nginx,nginx将动态资源、静态资源通过http/https返回给客户端,由客户端在浏览器展示。在这个过程中,对于动态资源来说,nginx就是一个反向代理,反向代理的过程中就有负载均衡,比如在应用服务器是多台的情况下,nginx能够将这些请求负载均衡的以此转发给每个应用服务器。后面讲到的限速、动静分离都是nginx的辅助能力

应用服务器:有很多种类型,如果后端是基于Java开发的,那么应用服务器可能是tomcat,还有些商用的应用服务器:weblogic

三、nginx为什么出现并流行:

主要应用场景

一、一个http请求的全流程

用户在浏览器上输入一个网站的地址,客户端会发送一个http请求到nginx,nginx会将动态资源请求转发给应用服务器,应用服务器与数据库交互进行业务逻辑处理,处理完后,将数据返回给nginx,nginx将动态资源和自身的静态资源进行封装后返回给客户端。
二、nginx处理请求的过程

说明:

  1. 红色箭头表示客户端发送到nginx的请求,静态资源放在本地文件系统(Linux系统下的某个目录),nginx对于静态资源的响应非常高,但是应用服务器对动态资源的响应急剧下降,数据库对请求的处理就更低了,为了缓解nginx、应用服务器、数据库之间的处理差异,我们需要部署一个缓存服务器(具体还是需要根据系统的规模决定要不要部署缓存服务器)。
  2. 反向代理代理中还有缓存加速、负载均衡:假如应用服务器有多台,反向代理就不能代理给某一台应用服务器了,而需要通过一些算法将请求进行分发,以达到负载均衡;nginx可以将应用服务器从数据库获取到的数据缓存起来,下次请求过来时,就不需要再去应用服务器获取结果,可以直接返回结果
  3. api服务:nginx诞生初期是没有这个能力的,随着nginx不断发展,有了openResty后才有的能力。openResty是nginx和弱脚本的结合,可以通过api服务自己开发一个高性能的web服务器

nginx核心优势

一、高并发、高性能:随着互联网数据和用户量的增长,之前使用的apache的web服务器已无法满足。高并发的场景下我们只用增加进程数就能解决,依赖于事件驱动模型、进程处理请求模型,他是用一个进程来处理多个请求;高性能依赖于良好的设计;
二、扩展性好:

  1. nginx自身是模块化设计的,模块化设计最强的优点就是解耦,所有功能的耦合性是很低的,意味着一个模块出现问题,是不会对其他模块造成影响的;
  2. nginx允许开发第三方模块,如openResty、阿里巴巴的tngine
  3. 生态圈发展好

三、异步非阻塞的事件驱动模型:比如餐厅点餐这一场景,在阻塞式场景中,第一个顾客点完餐,就在那里等,等厨师做完并交付给这个顾客后,顾客走了,老板才能接待下一个客户,对于异步来说,顾客点完餐后拿了个号牌,下一个顾客可以继续上前点单,对于老板来说,他可以接待的人更多了(处理的请求更多了),后续老板可以增加个叫号器,这就是编程开销,所以,对于异步非阻塞的事件驱动模型增加了编程难度、编程开销,但是处理更高效
四、高可靠性:nginx通常运行在系统的边缘节点,用于接收用户的请求,nginx连续运行几年可能都不需要重启服务,但是对于其他服务器(如apache),可能运行几周就需要重启服务器,为保证业务连续性,我们是不能接受这种情况的。
五、热部署、平滑升级:不需要关机就能对后端应用程序进行更换,同时不中断连接请求的处理
六、bsd许可:允许nginx使用者根据自己的需求对nginx进行二开,并将二开代码运用到nginx中,同时能运用到商业场景

安装第一个rpm包形式的nginx

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python中的装饰器及其应用场景
  • chrome 插件开发入门
  • C语言-第六章-加餐:其他自定义类型
  • C语言第一周课
  • 用RPC Performance Inspector 优化你的区块链
  • java设计模式day02--(创建型模式:工厂模式、原型模式、建造者模式)
  • 【AIGC半月报】AIGC大模型启元:2024.09(上)
  • 探究零工市场小程序如何改变传统兼职模式
  • vscode安装使用plantuml插件
  • 集成电路学习:什么是SDK软件开发工具包
  • vivado 添加多循环路径
  • 滑动窗口——632. 最小区间
  • 【原创】edge-tts与基于mpv的edge-playback,使命令行和Python的Text To Speech唾手可得
  • 学习计算机网络
  • Flowable学习笔记
  • CAP理论的例子讲解
  • ESLint简单操作
  • export和import的用法总结
  • mysql 数据库四种事务隔离级别
  • Mysql数据库的条件查询语句
  • Python语法速览与机器学习开发环境搭建
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spark学习笔记之相关记录
  • SSH 免密登录
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从零搭建Koa2 Server
  • 从输入URL到页面加载发生了什么
  • 给新手的新浪微博 SDK 集成教程【一】
  • 经典排序算法及其 Java 实现
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 免费小说阅读小程序
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用SAX解析XML
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #每日一题合集#牛客JZ23-JZ33
  • (1)常见O(n^2)排序算法解析
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (编译到47%失败)to be deleted
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm高校实验室 毕业设计 800008
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十六)串口UART
  • (一)Java算法:二分查找
  • (一)基于IDEA的JAVA基础1
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET 设计模式初探
  • .NET 药厂业务系统 CPU爆高分析
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net图片验证码生成、点击刷新及验证输入是否正确