HTTP 连接建立和请求处理过程
HTTP 连接建立和请求处理过程如下:
- Nginx 启动时,Master 进程,加载配置文件。
- Master 进程,初始化监听的 Socket。
- Master 进程,Fork 出多个 Worker 进程。
- Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求。
Nginx 高性能、高并发
Nginx 为什么拥有高性能并且能够支撑高并发?
- Nginx 采用多进程+异步非阻塞方式(IO 多路复用 Epoll)。
- 请求的完整过程:建立连接→读取请求→解析请求→处理请求→响应请求。
- 请求的完整过程对应到底层就是:读写 Socket 事件。
Nginx 的事件处理模型
Request:Nginx 中 HTTP 请求。
基本的 HTTP Web Server 工作模式:
- 接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体。
- 处理请求。
- 返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)。
Nginx 也是这个套路,整体流程一致,只不过nginx内部又细化为了11个函数阶段:
Nginx如何处理一个连接
Nginx作为服务器
1 启动
- 首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址
- 然后,nginx的master进程里面,先初始化好这个监控的socket(创建socket--设置addrreuse等选项--绑定到指定的ip地址端口--在listen),然后再fork出多个子进程出来,然后子进程会竞争accept新的连接。
此时,客户端就可以向nginx发起连接了。
2 客户端向Nginx发起连接
- 首先:当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体。
- 其次:设置读写事件处理函数并添加读写事件来与客户端进行数据的交互。
- 最后,nginx或客户端来主动关掉连接。至此,一个连接寿终正寝。
Nginx作为客户端
Nginx也可以作为客户端来请求其他server的数据(如upstream模块),此时与其他server创建连接,所创建的连接也封装在ngx_connection_t结构体中。作为客户端:
- 首先:nginx获取一个ngx_connection_t结构体
- 然后,创建socket,并设置socket属性(比如非阻塞)
- 之后,通过添加读写事件,调用connect/read/write来调用连接
- 最后,关掉连接,释放ngx_connection_t。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nginx处理请求的过程 - Python技术站