nginx -c conf/nginx.conf
读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–>获取资源
|