0001nginx简介、相关模型与原理

文章目录

  • 一. 什么是Nginx
  • 二. ngnix的一些模型
    • 1、nginx的进程模型
    • 2、worker的抢占(锁)机制模型
    • 3. nginx事件处理模型
  • 三. nginx加载静态资源的过程

一. 什么是Nginx

Nginx是一个高性能HTTP反向代理服务器,以下是nginx的相关能力

  1. 反向代理:nginx选择去将请求路由到那个ip
  2. 通过配置文件实现集群、负载均衡
  3. 可以处理2-3万并发连接数,官方监测能支持5万并发
  4. 静态资源服务器:通过将静态资源变成为服务。
  5. 网关:对接口进行拦截,配置安全管理

 
正向代理与反向代理的概念

正向代理:请求直接到达目标服务器
反向代理:请求被Nginx统一接收,反向代理服务器接收到之后,按照一定的规则将请求分发给指定服务器(通过http模块)
反向代理的优点:可以隐藏服务器的存在和特征,充当client和服务器的中间层,这是比较安全的。

 

二. ngnix的一些模型

1、nginx的进程模型

nginx采用单主进程,多子进程的模型

配置位置:nginx.conf
worker_processes 默认为1,也可以配置为:worker_processes auto;
0001nginx简介、相关模型与原理_第1张图片
请求过程:

从客户端(前端页面请求、postman请求)到nginx(master)接收请求,分发请求到工作进程,工作进程处理请求并将返回结果发送给客户端,最后管理nginx与客户端的链接。

  1. 客户端发送请求:当客户端发送HTTP请求到Nginx服务器时,Nginx会监听并接收这个请求。
  2. Nginx接收请求:Nginx的主进程接收到客户端的请求后,会将请求分发给工作进程(worker process)来处理。
  3. 工作进程处理请求:工作进程会根据Nginx的配置文件中的规则,对请求进行处理。这包括处理静态文件、代理请求到后端服务器、负载均衡等操作
  4. 响应客户端:工作进程处理完请求后,会生成相应的HTTP响应,并将响应发送回给客户端。
  5. 关闭连接:一旦响应发送给客户端,Nginx会关闭与客户端的连接,释放资源。

注意:

  1. master监控worker的健康状况,如果有关闭的worker进程,会重启新的worker进程。
  2. worker之间相互独立。

查看主进程和工作进程

ps -ef | grep nginx 

0001nginx简介、相关模型与原理_第2张图片
看到有一个主进程,若干work进程。

 

2、worker的抢占(锁)机制模型

0001nginx简介、相关模型与原理_第3张图片
假设一个master开启三个worker子进程,
此时client发起请求,三个worker去抢占互斥锁accep_mutex,假设worker1抢到了就处理请求,其他worker等待worker1处理完一个请求并将结果返回给client后,重新抢占锁。

 

3. nginx事件处理模型

当client向worker1请求堵塞时,其他client可以接着发出请求到work1,是异步非堵塞模型。

0001nginx简介、相关模型与原理_第4张图片
为什么Nginx性能这么高?

因为他的事件处理机制为异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程(或线程)。

 

三. nginx加载静态资源的过程

nginx接受客户端请求并找到静态资源的过程

0001nginx简介、相关模型与原理_第5张图片
加载过程:

  1. 客户端请求:在页面上输入http:ip:80/ 。路由“/”的请求会请求到Nginx服务器,
  2. nginx监听到来自80端口的请求,接着找到监听80端口的server,最后server加载默认的html

这里通过一个简单的server块配置理解下server:


    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }

这里表示一台server,监听80端口,server_name对应client的请求ip、hostname,当server监听到之后会加载nginx目录(可配)下html目录配置的文件。

接着详细描述一下:

  1. server指令用于定义一个虚拟主机(Virtual Host),即一个独立的服务器实例。每个server块都包含了对特定域名或IP地址的请求的处理规则
  2. 端口:server块的监听端口,即当有固定端口的进程请求时,server会进行拦截
  3. 域名和IP地址:可以使用servername指令来指定server块所匹配的域名或IP地址。例如,servername example.com;表示匹配域名为example.com的请求。
  4. 请求处理:拦截请求后,根据配置进行相对应的请求:如代理、重定向、静态文件处理等。例如,可以使用location指令来匹配要请求的URL
  5. SSL/TLS支持:如果需要启用HTTPS协议,可以在server块中配置SSL/TLS证书和相关参数,以实现安全的通信。
  6. 负载均衡:Nginx还支持负载均衡功能,可以在server块中配置upstream指令,将请求分发给多个后端服务器,以提高系统的性能和可靠性

你可能感兴趣的:(nginx,nginx)