分享

UC头条:Nginx基础知识

 迷人的三道茶 2021-08-12

1、架构设计

1.1、设计概览

1.2、模块化结构

1.3、Web请求处理方式

1.4、事件驱动模型

2、常用功能

2.1、HTTP代理与反向代理

2.2、负载均衡

2.3、Web缓存

Niginx是一款开源的高性能HTTP服务器及反向代理服务器产品,此外,它还可以提供IMAP/POP3代理服务等功能。

1、架构设计

1.1、设计概览

主进程:MasterProcess,主要功能是与外界通信和对内部其它进程管理,包括进行配置文件解析、数据结构初始化、模块配置和注册、信号处理、网络监听生成、工作进程生成和管理工作。

工作进程:WorkerProcess,由主进程生成,生成数量可在配置文件中指定,正常情况下生存于主进程的整个生命周期,主要进行进程初始化、模块调用和请求处理等工作,是Nginx服务器提供服务的主体。

缓存机制:为提高请求与响应处理效率,通过缓存机制,将历史响应数据缓存到本地。在每次Nginx服务器启动后的一段时间内,会启动专门的进程对本地缓存的内容重建索引,保证对缓存文件的快速访问。

点击加载图片

1.2、模块化结构

Nignx服务器的开发完全遵循模块化设计思想。

命名习惯:一般ngx_开头,_module结尾,如ngx_core_module、ngx_events_module等。

模块分类:核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块与第三方模块5大类。

核心模块:提供最基础最核心服务,主要包括两类功能,一类为主体功能,如进程管理、权限控制、错误日志记录、配置解析等;一类为响应请求事件必需的功能,包括事件驱动机制、正则表达式解析等。

标准HTTP模块:默认会被编译到Nginx中,除非在配置时添加-without-XXX参数声明不编译,如

模块功能
ngx_http_core配置端口、URI分析、服务器响应错误处理、别名控制等http核心事务
ngx_http_access_module基于IP地址的访问控制(允许/拒绝)
ngx_http_auth_basic_module基于HTTP的身份认证
ngx_http_headers_filter_module设置HTTP响应头
ngx_http_upstream_module负载均衡支持

可选HTTP模块:默认不会被编译到Nginx中,须在配置时添加-with-XXX参数声明编译

模块功能
ngx_http_mp4_module支持将H.264/AAC编码的多媒体信息按照流文件传输(如.mp4/.m4v/.m4a格式)
ngx_http_flv_module支持flash

邮件服务模块:Nginx发行版中,快速编译默认不会编译相关模块,如

模块功能
ngx_mail_pop3_module支持POP3协议
ngx_mail_imap_module支持IMAP协议
ngx_mail_smtp_module支持SMTP协议

第三方模块:自定义扩展模块,如

模块功能
echo_nginx_module支持在Nginx配置文件中使用echo、sleep、time及exec等类Shell命令)
rds_json_nginx_module支持Json数据的处理
lua_nginx_module支持lua脚本语言

1.3、Web请求处理方式

处理请求的三种方式:

1、多进程方式:服务器每收到一个请求,就会由主进程生成一个子进程与客户端进行交互处理,直到连接断开,该子进程就结束了。该方式设计和实现相对简单,但是操作系统生成子进程开销较大,当并发量较大时,服务器压力很大;(初期的Apache服务器就是该方式,为了应对高并发,采用了“预生成进程”机制)

2、多线程方式:服务器每收到一个请求,就会由主进程派生一个线程与客户端进行交互处理。该方式开销小于生成进程,但是需要处理多线程问题。

3、异步方式:

同步与异步:是描述通信模式的概念。同步指发送方发送请求后,需要等到接收方响应后才能发送下一个请求;异步则相反,发送方不必等待接收方的响应就可以发现下一个请求;

阻塞与非阻塞:是描述进程处理调用的方式。阻塞方式是调用结果返回之前,当前线程从运行状态被挂起,一直等到调用结果返回之后,才会进入就绪状态,获取CPU后继续执行;非阻塞方式则相反,如果调用结果无法立即返回,当前线程也不会挂起,而是立即返回执行下一个调用。

经常会使用“同步阻塞方式“与“异步非阻塞方式”。

Nginx服务器如何处理请求:

其为了应对高并发,使用的异步非阻塞方式对外提供服务。Nginx启动后,会产生一个主进程和多个工作进程(相当于预生成),每个工作进行使用异步非阻塞方式,可以处理多个客户端请求。

1.4、事件驱动模型

事件驱动模型:一般由事件收集器、事件发送器和事件处理器三部分组成。

点击加载图片

事件处理的3中方法:

1、发送器传递一个请求,目标对象创建一个新进程,调用处理器处理。这种方式编码实现相对简单,但是创建进程开销大,导致服务器性能较差;

2、发送器传递一个请求,目标对象创建一个新线程,调用处理器处理。这种方式性能更高,但是会面临多线程控制问题(同步、死锁),编码难度增大;

3、发送器传递一个请求,目标对象将其放入一个待处理的列表中,使用非阻塞I/O方式调用处理器处理。这种方式编码复杂度更高,但是效率更好。大多数网络服务器采用的这种方式,Nginx也一样。

Nginx事件驱动模型:采用的“事件驱动处理库“方式,也称“多路IO复用方法”,最常见的有select模型、poll模型与epoll模型,Nginx还支持rtsig模型、kqueue模型、dev/poll模型和eventport模型等。

2、常用功能

2.1、HTTP代理与反向代理

最主要功能之一

2.2、负载均衡

两种场景:一种是单一的重负载分摊到多个节点做并行处理,然后汇集每个节点的结果返回;一种是将并发流量分摊到多个节点,提供服务器处理性能。一般谈到的负载均衡都是指后者。

Nginx负载均衡策略:内置策略(轮询、加权轮询、IPhash)和扩展策略(urlhash、fair等)。轮询:即每个请求按顺序逐一分配到不同的后端节点即可;加权轮询:指定请求到后端节点的权重,一般用于后端节点性能不均衡场景;IPhash:将请问IP进行hash操作,分配到不同后端节点,之后对应IP请求会固定访问某个后端节点,解决用户session在不同节点无法共享的问题;

2.3、Web缓存

缓存机制对应提高web服务器负载能力、提高用户请求响应速度至关重要,目前Nginx在这方面能力以及堪比Squid。它自身可以通过ProxyStore和ProxyCache实现,也可以与Squid、nacache联合使用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多