Nginx简要介绍

Nginx

一、Nginx介绍

Nginx是十分轻量级的HTTP服务器。Nginx,它的发音为“engine X”,是一个高性能的HTTP反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器

二、Nginx可以做什么

  1. 作为Web服务器,Nginx处理静态文件、索引文件,自动索引的效率非常高
  2. 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度
  3. 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡

负载均衡:增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器

  1. 动静分离

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

三、Nginx有哪些优点

Nginx凭借其稳定性低资源消耗简单配置丰富的功能,从十多年前名不见经传的Web服务器软件,发展到如今能够跟Apache匹敌的地位。

  1. 在性能方面,Nginx是专门为性能优化而开发的,实现上非常注重效率。它采用内核Poll模型,可以支持更多的并发连接,最大可以支持对5万个并发连接数的响应,而且只占用很低的内存资源
  2. 在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持1万个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的
  3. 在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行

Nginx具有很高的稳定性;支持热部署;代码质量非常高,代码很规范,手法成熟,模块扩展也很容易。

四、什么是代理服务器、什么是正 / 反向代理?

4.1 代理是什么?

代理简单来说,就是如果我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做。

最简单的例子就是我们买房时,委托中间公司来找合适的房子,我们只需要选好自己想要的房子,然后交钱就行了。中介公司就是给我们做代理服务的,我们委托中介公司帮我们找房子。

Nginx 主要能够代理如下几种协议,其中用到的最多的就是做Http代理服务器。img

4.2 代理服务器

首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端。比如GoAgent,FQ神器。

img

代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页,而是通过向代理服务器发送请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

一个完整的代理请求过程为:客户端首先与代理服务器创建连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或则获得目标服务器的指定资源。Web代理服务器是网络的中间实体。代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。
HTTP的代理服务器既是Web服务器又是Web客户端。

4.3 正向代理

正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取的内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端必须要进行一些特别的设置才能使用正向代理。

img

正向代理代理的对象是客户端,正向代理中,proxy和client同属一个LAN,对server透明。

举例来讲,国内无法直接访问谷歌,必须通过使用VPN来进行访问。这里的 VPN 就是做正向代理的。

4.4 反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

简单来讲:在服务器端接收客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。

img

反向代理代理的对象是服务端,反向代理中,proxy和server同属一个LAN,对client透明

4.5 总结

正向代理代理客户端,反向代理代理服务器。

理解这两种代理的关键在于代理服务器所代理的对象是什么,正向代理代理的是客户端,我们需要在客户端进行一些代理的设置。而反向代理代理的是服务器,作为客户端的我们是无法感知到服务器的真实存在的。

正向代理客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向哪个原始服务器转交请求,并将获得的内容返回给客户端。

五、Nginx框架模型介绍

5.1 进程组件角色

  • • Master 进程:监视工作进程的状态 ; 当工作进程死掉后重启一个新的 ; 处理信号和通知工作进程。
  • Worker 进程:处理客户端请求,从主进程处获得信号做相应的事情。
  • Cache Loader 进程:加载缓存索引文件信息,然后退出。
  • Cache Manager 进程:管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除。

Nginx的框架模型

master-workers 的机制的好处
  • 首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销, 同时在编程以及问题查找时,也会方便很多。
  • 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
  • 其次,采用独立的进程,可以让互相之间不会 影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当 前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
设置多少个 worker

Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进 程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话 下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。

worker 数和服务器的 cpu 数相等是最为适宜

连接数 worker_connection
  • 第一个:发送请求,占用了 woker 的几个连接数?

    ​ 答案:2 或者 4 个

  • 第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?

    ​ 普通的静态访问最大并发数是: worker_connections * worker_processes /2,
    ​ 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。

一个 nginx 能建立的最大连接 数,应该是 worker_connections * worker_processes。

当然,这里说的是最大连接数,对于 HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections * worker_processes。

如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访 问最大并发数是: worker_connections * worker_processes /2。

而如果是 HTTP 作 为反向代 理来说,最大并发数量应该是 worker_connections * worker_processes/4。

因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服 务的连接,会占用两个连接。

在这里插入图片描述

worker_connection是Nginx中的一个配置项,用于设置每个worker进程与客户端之间的最大连接数。worker_connection的默认值是512,可以通过修改nginx.conf配置文件中的worker_connections来修改它的值。

worker_processes是Nginx中的一个配置项,用于设置Nginx服务器启动时创建的worker进程数。worker_processes的默认值是1,可以通过修改nginx.conf配置文件中的worker_processes来修改它的值。通常情况下,worker_processes的值应该根据系统的CPU核心数来进行调整。

5.2 模型流程

nginx采用多进程的模式,nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。

框架模型流程

六、参考文章

  1. Nginx------nginx 反向代理 (建议收藏) ----- https://zhuanlan.zhihu.com/p/491075761
  2. Nginx是什么? — https://blog.csdn.net/weixin_60274825/article/details/122101640
  3. nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全 —https://blog.csdn.net/qq_40036754/article/details/102463099
  4. nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇 —https://blog.csdn.net/qq_40036754/article/details/127775066
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值