本文详细介绍了nginx的工作原理,帮助大家更好的理解和学习培训Nginx,让有兴趣的朋友掌握。
nginx的工作原理
Nginx由核心和模块组成。
NGX自己做的工作很少。当它接收到一个HTTP请求时,只是根据搜索环境变量把请求投射到一个位置块上,这个位置上配备的每条命令都会启动一个不同的模块来工作,所以这个模块可以算是Nginx真正的工作器。通常,一个位置中的一个命令涉及一个处理程序模块和几个过滤器模块(自然,几个位置可以复用同一个模块)。Handler模块负责解决请求并形成响应内容,而filter模块解决响应内容。
客户必须根据自己的需求开发设计的模块属于第三方模块。正是有了这么多模块的支撑点,Nginx的作用才会如此强大。
Nginx的模块分为关键模块、基础模块和第三方模块:
Nginx的模块可以分为以下三类:
Nginx流程实体模型
NGX的默认设置是多进程。Nginx启动后,会运行一个主进程和几个工作进程。其中,master作为所有过程组和客户的交互套接字。另外对进程进行监控,管理工作进程完成服务项目重启、平滑升级、替换日志文档、环境变量即时生效等功能。工人用来解决基本的互联网恶性事件。工人是公平的,他们在市场上相互竞争来解决手机客户端的请求。
nginx的流程实体模型如下图所示:
在设置主进程时,首先创建必须被监控的socket(listenfd),然后从主进程中fork()几个工作进程,让每个工作进程都可以监控客户请求的socket。一般来说,当建立连接时,会通知所有的工作进程,但只有一个进程可以接受连接请求,其他进程都不成功。用简单的英语来说,这是一个令人惊讶的情况。Nginx显示了一个accept_mutex(互斥锁)。有了这个锁之后,同时在accpet中总有一个进程连接,不容易出现意外。
先打开accept_mutex选项,只有收到了accept_mutex的进程才会添加accept恶性事件。NGX应用一个名为ngx_accept_disabled的独立变量来 *** 纵是否在市场上竞争accept_mutex锁。ngx_accept_disabled=nginxnginx的单个进程的连接总数/8-空剩余的连接总数。当ngx_accept_disabled超过0时,尝试获取accept_mutex锁就不容易了。ngx_accept_disable越大,给予它的机会就越大,其他进程获得锁的机会也就越大。如果不接受,每个工作进程的连接数都将被控制,而其他进程的连接池将被使用。通过这种方式,nginx *** 纵多个进程之间的连接平衡。
每个工作进程都有一个单独的连接池,连接池的大小是worker_connections。这里的连接池中存储的其实不是真正的连接,只是ngx_connection_t构造的一个大小为worker_connections的数组。而且nginx会根据一个链表free_connections来存储所有剩余的空ngx_connection_t。每次获取一个连接,从空剩余连接链表中获取一个,用完之后放入空剩余连接链表中。nginx可以创建的大量连接应该是worker_connections*worker_processes。自然,这是关于大量的连接。对于请求本地资源的HTTP,适用的大并发数是worker_connections*worker_processes,而对于作为反向代理的HTTP,大并发数应该是worker_connections*worker_processes/2。作为一个反向代理网络服务器,每个高并发都会创建一个与手机客户端的连接和一个与后端开发服务项目的连接,会占用两个连接。
nginx解析HTTP请求的步骤
Http是典型的请求-响应网络层协议。Http是文档协议,所以我们在分析请求行和请求头,以及它的输出响应行和响应头,通常是逐行求解。一般在创建连接后,加载一行数据信息,分析请求行中包含的method、uri和http_version信息的内容。然后逐行求解请求头,根据请求方法和请求头的信息内容确定是否有请求体以及请求体的长度,然后加载请求体。请求获得后,我们求解因请求而必须输出的数据信息,然后形成响应行、响应头及其响应体。在响应被发送到移动客户端之后,一个详细的请求被解决。
解决方案流程图:
以上是Nginx工作原理的详细描述。关于Nginx工作原理的大量资料,请关心其他相关文章!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)