[toc]
0.前言
从开始使用nginx到现在至少也有六年多的时间,一直停留在应用的层面上,这次抽了一个多星期的时间简单看了一下这两本书。本文不能说是对于nginx 的解析,在长期对nginx的模糊认识的情况下又有了更深的认识。包括对于master-worker的认识,对于nginx 使用epoll 事件模型的理解等。另外又看了一些应用层面的配置。
以下记录了几点简单的知识点,贴了一些链接都是在看书时产生的问题,搜索之后找到比较满意答案的链接。依旧是看得多记得少。长期更新。
1.Nginx应用层面问题
1.1 pid文件的作用
记录Master 进程id,通过cli 向master进程发送信号,操控运行中的nginx。
1.2 worker进程数的设置
worker的进程数设置为cpu核心数相等时,进程间切换的代价还是最小的。
1.3 非守护进程运行
daemon on | off;
注意docker 下 daemon 需要设置为off.否则无法启动成功.详见
1.4 带有@的location
不直接处理用户请求,用于处内部请求重定向
理解为其他location转发.
1.5 try_files的应用
不是一个问题,但是继续强调一下.
单页应用中(spa)路由跳转重定向到index.html
location / {
try_files $uri $uri/ /index.html;
}
2.Nginx如何处理HTTP 请求
2.1 请求处理
2.2 处理流程
2.3 为何高效
epoll模型
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);
- 链表记录监听句柄,可以监听更多的文件句柄。
- epoll_wait 近返回有事件发生的句柄,减少从系统态复制到用户态的数据。
定时器实现
- 将未完成的连接处理放入超时管理中,超时未完成剔除,避免无效连接占用资源。
- 超时对象的组织形式采用红黑树,提供较高性能的删除和插入操作.