nginx -c conf/nginx.conf # 开启了http协议的初始化
读nginx源码,从conf开始,其次tcp server的初始化,http的状态机,最后是服务器的处理
1、processs 4
启动了四个work进程,
1、nginx三次握手是worker进程完成还是master进程完成?
worker进程没有监听80, master一开始监听80,是在listen完之后,
master process listen(80)
fork() 子进程, 子进程继承master
master和worker都有listen fd, 只有worker里面的listenfd加入epoll(), master不做处理,真正处理浏览器链接的是worker进程
结论:处理连接都是由worker进程处理。
epoll有个最大的特点,是有一个永真的死循环:
while(1){
if(shmem.mtx){ // 如果有进程在用fd
lock(shmem.mtx)就锁住当前fd
epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd,ev);//加入到epoll
}
epoll_wait()
}
二、http模块
http {}
phase–》http的状态机
每个进程都处理两个server,都有两个listenfd。
上面的post是前面或之前的意思,
ngx_http_content_phase --> 对用户内容的处理,比如拉黑,
ngx拿到http头可以做重定向。server_rewrite_phase,
get 0voice/king http2.0
find_config_phase–>获取资源