文章目录
- 一. 什么是Nginx
- 二. ngnix的一些模型
- 1、nginx的进程模型
- 2、worker的抢占(锁)机制模型
- 3. nginx事件处理模型
- 三. nginx加载静态资源的过程
一. 什么是Nginx
Nginx是一个高性能HTTP反向代理服务器,以下是nginx的相关能力
- 反向代理:nginx选择去将请求路由到那个ip
- 通过配置文件实现集群、负载均衡
- 可以处理2-3万并发连接数,官方监测能支持5万并发
- 静态资源服务器:通过将静态资源变成为服务。
- 网关:对接口进行拦截,配置安全管理
正向代理与反向代理的概念
正向代理:请求直接到达目标服务器
反向代理:请求被Nginx统一接收,反向代理服务器接收到之后,按照一定的规则将请求分发给指定服务器(通过http模块)
反向代理的优点:可以隐藏服务器的存在和特征,充当client和服务器的中间层,这是比较安全的。
二. ngnix的一些模型
1、nginx的进程模型
nginx采用单主进程,多子进程的模型
配置位置:nginx.conf
worker_processes 默认为1,也可以配置为:worker_processes auto;
请求过程:
从客户端(前端页面请求、postman请求)到nginx(master)接收请求,分发请求到工作进程,工作进程处理请求并将返回结果发送给客户端,最后管理nginx与客户端的链接。
- 客户端发送请求:当客户端发送HTTP请求到Nginx服务器时,Nginx会监听并接收这个请求。
- Nginx接收请求:Nginx的主进程接收到客户端的请求后,会将请求分发给工作进程(worker process)来处理。
- 工作进程处理请求:工作进程会根据Nginx的配置文件中的规则,对请求进行处理。这包括处理静态文件、代理请求到后端服务器、负载均衡等操作。
- 响应客户端:工作进程处理完请求后,会生成相应的HTTP响应,并将响应发送回给客户端。
- 关闭连接:一旦响应发送给客户端,Nginx会关闭与客户端的连接,释放资源。
注意:
- master监控worker的健康状况,如果有关闭的worker进程,会重启新的worker进程。
- worker之间相互独立。
查看主进程和工作进程
ps -ef | grep nginx
看到有一个主进程,若干work进程。
2、worker的抢占(锁)机制模型
假设一个master开启三个worker子进程,
此时client发起请求,三个worker去抢占互斥锁accep_mutex,假设worker1抢到了就处理请求,其他worker等待worker1处理完一个请求并将结果返回给client后,重新抢占锁。
3. nginx事件处理模型
当client向worker1请求堵塞时,其他client可以接着发出请求到work1,是异步非堵塞模型。
为什么Nginx性能这么高?
因为他的事件处理机制为异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程(或线程)。
三. nginx加载静态资源的过程
nginx接受客户端请求并找到静态资源的过程
加载过程:
- 客户端请求:在页面上输入http:ip:80/ 。路由“/”的请求会请求到Nginx服务器,
- 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目录配置的文件。
接着详细描述一下:
- server指令用于定义一个虚拟主机(Virtual Host),即一个独立的服务器实例。每个server块都包含了对特定域名或IP地址的请求的处理规则
- 端口:server块的监听端口,即当有固定端口的进程请求时,server会进行拦截
- 域名和IP地址:可以使用servername指令来指定server块所匹配的域名或IP地址。例如,servername example.com;表示匹配域名为example.com的请求。
- 请求处理:拦截请求后,根据配置进行相对应的请求:如代理、重定向、静态文件处理等。例如,可以使用location指令来匹配要请求的URL
- SSL/TLS支持:如果需要启用HTTPS协议,可以在server块中配置SSL/TLS证书和相关参数,以实现安全的通信。
- 负载均衡:Nginx还支持负载均衡功能,可以在server块中配置upstream指令,将请求分发给多个后端服务器,以提高系统的性能和可靠性。