
Nginx
文章平均质量分 83
丶Hiroshi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Nginx 源码阅读笔记1 内存池
在大体看完 unp 后本来想练手写一个小型 http 服务器的,但是感觉少了点什么,所以打算先学习一下 nginx 源码,看看大牛们是怎么设计的。然而突然发现自己好像不怎么了解 nginx,所以花了一个多星期翻完了《深入理解 Nginx》感兴趣的部分,加强了对 nginx 的了解。计划是以 linux 为系统环境,看完 http 核心模块,事件模块就看 epoll 模块,然后模仿着写一个小的(砍掉大原创 2017-04-09 19:54:58 · 188 阅读 · 0 评论 -
Nginx 源码阅读笔记4 启动流程
总体流程以下代码删掉了部分内容,也就是启动时指定-v -V -t -T选项时用于显示版本ngx_show_version,测试配置ngx_test_config,显示配置ngx_dump_config的相关代码,因为这里主要分析正常启动的流程,所以不关心这些参数int ngx_cdecl main(int argc, char *const *argv) { ngx_buf_t原创 2017-04-12 18:45:03 · 592 阅读 · 0 评论 -
Nginx 源码阅读笔记3 时间管理
在 nginx 中,每个进程各自管理着自己的时间,而对于时间的管理则采用了缓存的方式,由于读取时间比更新时间频繁得多,而时间可能被信号处理函数或不同的线程(如果支持的话)更新,所以需要加锁,此时如果采用同一个变量来表示时间,则读取时间时也需要加锁,为了让读取操作免去加锁,nginx 使用了一个循环数组来缓存时间变量声明省略了一些相似的变量,比如描述 http 时间的字符串有好几种格式,所以有好几个数原创 2017-04-11 20:50:14 · 697 阅读 · 0 评论 -
Nginx 源码阅读笔记7 worker 主循环
worker 主循环位于ngx_worker_process_cycle函数,函数一开头出现了几个赋值 ngx_int_t worker = (intptr_t) data; ngx_process = NGX_PROCESS_WORKER; ngx_worker = worker; 这个data就是 master 进程生成子进程时传入的,表示这是第几个子进程,不一定与ngx_processe原创 2017-05-02 20:21:18 · 590 阅读 · 0 评论 -
Nginx 源码阅读笔记8 epoll 模块
终于到事件模块了,只看了 epoll 模块,其中忽略了异步 IO 和 eventfd 的部分 那么首先是初始化部分,也就是ngx_epoll_init函数 epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module); if (ep == -1) { ep = epoll_create(cycle->connection原创 2017-05-03 16:37:29 · 1189 阅读 · 0 评论 -
Nginx 源码阅读笔记6 master 主循环
只看了 master 模式下的代码,没有考虑单进程的情况,主循环位于ngx_master_process_cycle函数,在main函数的最后被调用 首先是阻塞信号,这些信号的信号处理函数已经在main函数中设置了 sigemptyset(&set); sigaddset(&set, SIGCHLD); sigaddset(&set, SIGALRM); sigaddset(&set, SIG原创 2017-04-23 12:33:38 · 680 阅读 · 0 评论 -
Nginx 源码阅读笔记5 初始化 cycle
距离上一篇过了有一个多星期,虽然没有写总结笔记,但是一直有在看代码,目前看完了 http 的发送,感兴趣的只剩下 subrequest 和 upstream 部分了,不得不说啊,这个异步的代码,看起来真的是难受,还有就是前几天发布了1.12.0版本,而我在看得是1.10.3版本,虽然没什么大问题,但是强迫症告诉我要看新的,于是搞了很久的diff和patch,由于代码中含注释太多,打起补丁来太麻烦了,原创 2017-04-21 19:04:26 · 774 阅读 · 0 评论 -
Nginx 源码阅读笔记9 http 模块初始化
http 模块的初始化个人认为十分复杂,主要数据之间的关系太乱了,那么先从 http 部分的配置解析开始,首先是 http 块的解析,也就是ngx_http_block函数,由于这些函数都特别特别地长,所以就挑重点看吧 首先保证只有一个 http 块,然后创建一个存放 http 块下所有模块配置信息的ngx_http_conf_ctx_t结构体 if (*(ngx_http_conf_ctx_原创 2017-05-07 15:27:00 · 1018 阅读 · 0 评论 -
Nginx 源码阅读笔记2 原子变量与互斥锁
原子变量 原子变量主要看了 x86 的实现,位于ngx_gcc_automic_x86.h CAS #if (NGX_SMP) // SMP 多核架构下需要加锁 #define NGX_SMP_LOCK "lock;" #else #define NGX_SMP_LOCK #endif static ngx_inline ngx_atomic_uint_t ngx_atom原创 2017-04-10 20:00:22 · 728 阅读 · 0 评论