1.daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。
2.如何调试nginx,关闭后台模式,以单进程方式运行。
3.nginx的进程模型以及事件处理模型。
4.我们要控制nginx,只需要通过kill向master进程发送信号就行了。
5.每个worker进程都是从master进程fork过来,在master进程里面,
先建立好需要listen的socket(listenfd)之后,然后再fork出多个worker进程。
6.所有worker进程在注册listenfd读事件前抢accept_mutex,
抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。
7.对于一个基本的web服务器来说,事件通常有三种类型,网络事件、信号、定时器。
8.关于信号的处理,大家可以学习一些专业书籍。
9. 我们看看nginx是如何处理一个连接的。首先,nginx在启动时,会解析配置文件, 得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen), 然后再fork出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向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。
10.nginx通过设置worker_connectons来设置每个进程支持的最大连接数,最大连接数是worker_connections * worker_processes。
11.nginx会控制进程是否添加accept事件,只有获得了accept_mutex的进程才会去添加accept事件。
12.nginx使用一个叫ngx_accept_disabled的变量来控制是否去竞争accept_mutex锁。
13.ngx_http_request_t是对一个http请求的封装。
14.用filter来过滤数据,对数据进行加工,如truncked传输、gzip压缩等。
2.如何调试nginx,关闭后台模式,以单进程方式运行。
3.nginx的进程模型以及事件处理模型。
4.我们要控制nginx,只需要通过kill向master进程发送信号就行了。
5.每个worker进程都是从master进程fork过来,在master进程里面,
先建立好需要listen的socket(listenfd)之后,然后再fork出多个worker进程。
6.所有worker进程在注册listenfd读事件前抢accept_mutex,
抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。
7.对于一个基本的web服务器来说,事件通常有三种类型,网络事件、信号、定时器。
8.关于信号的处理,大家可以学习一些专业书籍。
9. 我们看看nginx是如何处理一个连接的。首先,nginx在启动时,会解析配置文件, 得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen), 然后再fork出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向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。
10.nginx通过设置worker_connectons来设置每个进程支持的最大连接数,最大连接数是worker_connections * worker_processes。
11.nginx会控制进程是否添加accept事件,只有获得了accept_mutex的进程才会去添加accept事件。
12.nginx使用一个叫ngx_accept_disabled的变量来控制是否去竞争accept_mutex锁。
13.ngx_http_request_t是对一个http请求的封装。
14.用filter来过滤数据,对数据进行加工,如truncked传输、gzip压缩等。