一,nginx架构
在Linux系统中以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程(多进程的工作方式)
master进程
|
信号
|
|
---------------------------------------------------------------
| | | worker进程 worker进程 worker进程
| | |
| | |
连接 连接 连接
----------- ----------- -----------
| | | | | | client client client client client client
1.多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程相互之间是独立的
2.一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其他进程的请求。
3.推荐设置worker的个数为cpu的核数
4.异步非阻塞(非阻塞不会让出cpu导致切换浪费)
二,基础概念
1.connection : 是对tcp连接的封装
nginx可以通过worker_connections来设置每个worker进程支持的最大连接数
nginx能建立的最大连接数:worker_connections * worker_processes
对于http请求本地资源来说,能够支持最大并发数量:worker_connections * worker_processes
如果http作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2
(因为作为反向代理服务器,每个并发会建立与客户端的链接和与后端服务器的链接,会占用两个链接)
2.request
Nginx中指http请求
web服务器工作流:
http 请求是典型的请求-响应类型的的网络协议,而 http 是文本协议,所以我们在分析请求行与请求头,以及输出响应行与响应头,往往是一行一行的进行处理。如果我们自己来写一个 http 服务器,通常在一个连接建立好后,客户端会发送请求过来。然后我们读取一行数据,分析出请求行中包含的 method、uri、http_version 信息。然后再一行一行处理请求头,并根据请求 method 与请求头的信息来决定是否有请求体以及请求体的长度,然后再去读取请求体。得到请求后,我们处理请求产生需要输出的数据,然后再生成响应行,响应头以及响应体。在将响应发送给客户端之后,一个完整的请求就处理完了。