Nginx是如何处理一个请求

Posted 落霞与孤鹜齐飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx是如何处理一个请求相关的知识,希望对你有一定的参考价值。

首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen),然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程 )出多个子进程出来,然后子进程会竞争accept新的连接。

此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体。接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。

当然,nginx也是可以作为客户端来请求其它server的数据的(如upstream模块),此时,与其它server创建的连接,也封装在ngx_connection_t中。作为客户端,nginx先获取一个ngx_connection_t结构体,然后创建socket,并设置socket的属性( 比如非阻塞)。然后再通过添加读写事件,调用connect/read/write来调用连接,最后关掉连接,并释放ngx_connection_t。

 

 

以上是关于Nginx是如何处理一个请求的主要内容,如果未能解决你的问题,请参考以下文章

Nginx是如何处理一个请求

Nginx是如何处理Request的?

在iOS开发中,是如何处理好网络加密这块的?[个人详细分析]

tomcat 对请求参数中的加号是如何处理的

ASP.NET Core管道深度剖析:管道是如何处理HTTP请求的?

08 nginx 的一次请求处理调试