nginx 源码学习笔记(二)——nginx精粹-模块
来源:互联网 发布:阿里云视频播放器sdk 编辑:程序博客网 时间:2024/05/29 09:18
看了一点nginx的源码发现,nginx的模块思想确实吸引了我,也不得不佩服俄罗斯人的想问题方式,要分析nginx源码,首先要搞懂的就是nginx的模块思想以及相关的数据结构。
还记得我们上一次写的helloworld模块么?里面涉及最重要的数据就是ngx_module_t结构体。
在自动脚本生成的objs/ngx_modules.c中定义指向ngx_module_t结构体的指针数组,如下:
- extern ngx_module_t ngx_core_module;
- extern ngx_module_t ngx_errlog_module;
- extern ngx_module_t ngx_conf_module;
- extern ngx_module_t ngx_events_module;
- extern ngx_module_t ngx_event_core_module;
- extern ngx_module_t ngx_epoll_module;
- extern ngx_module_t ngx_http_module;
- extern ngx_module_t ngx_http_core_module;
- extern ngx_module_t ngx_http_log_module;
- extern ngx_module_t ngx_http_upstream_module;
- extern ngx_module_t ngx_http_static_module;
- extern ngx_module_t ngx_http_autoindex_module;
- extern ngx_module_t ngx_http_index_module;
- extern ngx_module_t ngx_http_auth_basic_module;
- extern ngx_module_t ngx_http_access_module;
- extern ngx_module_t ngx_http_limit_zone_module;
- extern ngx_module_t ngx_http_limit_req_module;
- extern ngx_module_t ngx_http_geo_module;
- extern ngx_module_t ngx_http_map_module;
- extern ngx_module_t ngx_http_split_clients_module;
- extern ngx_module_t ngx_http_referer_module;
- extern ngx_module_t ngx_http_rewrite_module;
- extern ngx_module_t ngx_http_proxy_module;
- extern ngx_module_t ngx_http_fastcgi_module;
- extern ngx_module_t ngx_http_uwsgi_module;
- extern ngx_module_t ngx_http_scgi_module;
- extern ngx_module_t ngx_http_memcached_module;
- extern ngx_module_t ngx_http_empty_gif_module;
- extern ngx_module_t ngx_http_browser_module;
- extern ngx_module_t ngx_http_upstream_ip_hash_module;
- extern ngx_module_t ngx_http_cache_purge_module;
- extern ngx_module_t ngx_http_write_filter_module;
- extern ngx_module_t ngx_http_header_filter_module;
- extern ngx_module_t ngx_http_chunked_filter_module;
- extern ngx_module_t ngx_http_range_header_filter_module;
- extern ngx_module_t ngx_http_gzip_filter_module;
- extern ngx_module_t ngx_http_postpone_filter_module;
- extern ngx_module_t ngx_http_ssi_filter_module;
- extern ngx_module_t ngx_http_charset_filter_module;
- extern ngx_module_t ngx_http_userid_filter_module;
- extern ngx_module_t ngx_http_headers_filter_module;
- extern ngx_module_t ngx_http_copy_filter_module;
- extern ngx_module_t ngx_http_range_body_filter_module;
- extern ngx_module_t ngx_http_not_modified_filter_module;
- ngx_module_t *ngx_modules[] = {
- &ngx_core_module,
- &ngx_errlog_module,
- &ngx_conf_module,
- &ngx_events_module,
- &ngx_event_core_module,
- &ngx_epoll_module,
- &ngx_http_module,
- &ngx_http_core_module,
- &ngx_http_log_module,
- &ngx_http_upstream_module,
- &ngx_http_static_module,
- &ngx_http_autoindex_module,
- &ngx_http_index_module,
- &ngx_http_auth_basic_module,
- &ngx_http_access_module,
- &ngx_http_limit_zone_module,
- &ngx_http_limit_req_module,
- &ngx_http_geo_module,
- &ngx_http_map_module,
- &ngx_http_split_clients_module,
- &ngx_http_referer_module,
- &ngx_http_rewrite_module,
- &ngx_http_proxy_module,
- &ngx_http_fastcgi_module,
- &ngx_http_uwsgi_module,
- &ngx_http_scgi_module,
- &ngx_http_memcached_module,
- &ngx_http_empty_gif_module,
- &ngx_http_browser_module,
- &ngx_http_upstream_ip_hash_module,
- &ngx_http_cache_purge_module,
- &ngx_http_write_filter_module,
- &ngx_http_header_filter_module,
- &ngx_http_chunked_filter_module,
- &ngx_http_range_header_filter_module,
- &ngx_http_gzip_filter_module,
- &ngx_http_postpone_filter_module,
- &ngx_http_ssi_filter_module,
- &ngx_http_charset_filter_module,
- &ngx_http_userid_filter_module,
- &ngx_http_headers_filter_module,
- &ngx_http_copy_filter_module,
- &ngx_http_range_body_filter_module,
- &ngx_http_not_modified_filter_module,
- NULL
- };
objs/ngx_modules.c的ngx_module_t *ngx_modules[] = { }中只有每个模块变量的声明,而每个模块的定义都包含在自己的模块文件当中,比如ngx_core_module定义在src/core/nginx.c中:
- ngx_module_t ngx_core_module = {
- NGX_MODULE_V1,
- &ngx_core_module_ctx, /* module context */
- ngx_core_commands, /* module directives */
- NGX_CORE_MODULE, /* module type */
- NULL, /* init master */
- NULL, /* init module */
- NULL, /* init process */
- NULL, /* init thread */
- NULL, /* exit thread */
- NULL, /* exit process */
- NULL, /* exit master */
- NGX_MODULE_V1_PADDING
- };
是不是跟helloworld里面非常相似了,没错,他们都是模块,唯一的不同点就是helloworld是你另外加进去的。
0 0
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx 源码学习笔记(三)——nginx精粹-模块
- nginx 源码学习笔记(四)——nginx精粹-模块
- nginx 源码学习笔记(五)——nginx精粹-模块
- nginx 源码学习笔记(三)——nginx精粹-模块
- nginx 源码学习笔记(三)——nginx精粹-模块
- nginx 源码学习笔记(四)——nginx精粹-模块
- nginx 源码学习笔记(五)——nginx精粹-模块
- nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块
- nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块
- nginx 源码学习笔记(二十)—— event 模块(一) ——初始化
- nginx 源码学习笔记(二十三)—— event 模块(四) ——timer红黑树
- nginx 源码学习笔记(二十)—— event 模块(一) ——初始化
- nginx 源码学习笔记(二十三)—— event 模块(四) ——timer红黑树
- nginx 源码学习笔记(一)——初识nginx helloworld模块
- nginx 源码学习笔记(一)——初识nginx helloworld模块
- ORACLE备份还原(expdp/impdp)
- 美国发表中国军力报告 涉及侦察卫星及航母
- 《学习opencv》笔记——矩阵和图像操作——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero
- 远程服务协议介绍
- POCO库 Foundation::Thread模块 多线程与线程池支持
- nginx 源码学习笔记(二)——nginx精粹-模块
- Hibernate级联删除问题
- 反编译apk添加新功能后出现nullpointerexception空指针异常
- 查看后台更改删除记录
- 黑马程序员 IO流总结
- js简易的图片自动轮播
- JSTL JSP标准标签库的配置
- 动态代理和静态代理的区别
- 窦靖童手缠绷带秀英俊侧脸 网友直呼帅哭