
Nginx
文章平均质量分 55
猫和鱼爪
想学自己喜欢的一切
展开
-
ngx_hash散列表
ngx_hash_t散列表(全匹配)散列表槽的结构typedef struct { /* 指向用户定义元素数据的指针,如果当前ngx_hash_elt_t槽为空,则value=NULL */ void *value; /* 元素关键字长度 */ u_short len; /* 元素关键字首地址 */ u_char原创 2015-07-25 12:47:36 · 469 阅读 · 0 评论 -
《深入理解Nginx》之HTTP模块
Nginx HTTP模块ngx_http_module 对于每一个HTTP模块,都必须实现ngx_http_module接口。 typedef struct { /* 在解析http{}配置项前的回调函数 */ ngx_int_t (*preconfiguration)(ngx_conf_t *cf); /* 解析完http{}配置项后的回调函数 */原创 2015-08-03 23:25:25 · 1954 阅读 · 1 评论 -
ngx_array可变数组
ngx_array_t动态数组优点访问速度快允许元素个数不确定负责元素占用内存的分配,这些内存将由内存池统一管理结构typedef struct ngx_array_s ngx_array_t; struct ngx_array_s { //elts指向数组首地址 void *elts; //nelts是原创 2015-07-24 11:33:49 · 519 阅读 · 0 评论 -
《深入理解Nginx》笔记之 HTTP请求的11个处理阶段
HTTP请求的11个处理阶段typedef enum { // 接收到完整的HTTP头部后处理阶段 NGX_HTTP_POST_READ_PHASE = 0, // 将请求URI与location表达式匹配前,修改URI,即重定向阶段 NGX_HTTP_SERVER_REWRITE_PHASE, // 只能由ngx_http_core_module模块实现,用于根原创 2015-08-05 09:19:02 · 2549 阅读 · 0 评论 -
ngx_rbtree_t红黑树
ngx_rbtree_t红黑树红黑树的特性节点是红色或黑色;根节点是黑色;所有叶子节点都是黑色(即NIL哨兵节点);每个红色节点的两个子节点都是黑色;从任一节点到其每个叶子节点的所有简单路径都包含相同数目的黑色节点。红黑树节点结构体typedef ngx_uint_t ngx_rbtree_key_t;typedef struct ngx_rbtree_node_s ngx_rbtree原创 2015-07-24 21:29:24 · 489 阅读 · 0 评论 -
ngx_radix_tree基数树
ngx_radix_tree_t基数树基数树特点 基数树要求存储的每个节点都必须以32位整型作为区别任意两个节点的唯一标识。i.e. 有深度为3的基数树,包含四个节点:0x20000000、0x40000000、0x80000000、0xA0000000,其实基数树是按二进制来建树的。 由上图可知,基数树的最大深度为32。然而,有些时候数据可能只是在前几层,原创 2015-07-24 22:40:15 · 589 阅读 · 0 评论 -
《深入理解nginx》笔记之 ngx_upstream相关结构
ngx_http_upstream_t数据结构的意义typedef struct ngx_http_upstream_s ngx_http_upstream_t;struct ngx_http_upstream_s { // 处理读事件的回调函数 ngx_http_upstream_handler_pt read_event_handler; // 处理写事件的回调函原创 2015-08-17 23:11:30 · 3634 阅读 · 0 评论 -
Nginx master工作流程
master工作流程图 master进程不需要处理网络事件,它不负责业务的执行,只会通过管理worker等子进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。 它会通过检查一下7个标志位来决定ngx_master_process_cycle函数的运行(和worker检查4个标志位是差不多的): 1. sig_atomic ngx_reap原创 2015-07-28 00:00:12 · 2146 阅读 · 0 评论 -
Nginx worker工作流程
worker工作流程图worker接收的信号 worker进程的工作方法:ngx_worker_process_cycle,它会关注4个全局标志位。 1. sig_atomic_t ngx_terminate; 2. sig_atomic_t ngx_quit; 3. ngx_uint_t ngx_exiting; 4. sig_atomic_t ngx_reopen;原创 2015-07-27 20:54:48 · 1674 阅读 · 0 评论 -
Nginx监听端口管理
Nginx监听端口管理 每监听一个TCP端口,都将使用一个独立的ngx_http_conf_port_t结构体表示。ngx_http_conf_port_ttypedef struct { //socket地址家族 ngx_int_t family; //监听端口 in_port_t port; //监听端口下对应原创 2015-08-04 15:47:35 · 2622 阅读 · 0 评论 -
ngx_queue_t双向链表
ngx_queue_t 双向链表结构typedef struct ngx_queue_s ngx_queue_t;typedef struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;};容器提供的方法 方法名 参数含义 执行意义 ngx_queue_init(h) h是ngx_queue_t的指针原创 2015-07-23 13:57:00 · 422 阅读 · 0 评论 -
ngx_listening_s
ngx_listening_s 这个结构体在Nginx中用来监听一个端口。位于“Nginx包/src/core/ngx_connection.h”下。typedef struct ngx_listening_s ngx_listening_t;struct ngx_listening_s { //socket套接字句柄 ngx_socket_t fd; //监原创 2015-07-27 13:59:44 · 1027 阅读 · 0 评论 -
ngx_cycle_s
ngx_cycle_sngx_cycle_s结构体typedef ngx_cycle_s ngx_cycle_t;struct ngx_cycle_s { /* 保存着所有模块存储配置项的结构体指针,它首先是一个数组,每个数组成员又是一个指针, 这个指针指向另一个存储着指针的数组 */ void ****conf_ctx; //内存池原创 2015-07-27 17:20:54 · 925 阅读 · 0 评论 -
Nginx事件模块
ngx_event_module_t 这是事件模块都必须实现的接口。typedef struct { //事件模块的名称 ngx_str_t *name; //在解析配置项前,用于创建存储配置项参数的结构体 void *(*create_conf)(ngx_cycle_t *cycle); //在解析配置项完成后,用以综合处理当前事件模块原创 2015-07-29 14:10:27 · 916 阅读 · 0 评论 -
《深入理解Nginx》笔记之 ngx_mail相关结构体
Nginx mail相关模块结构体ngx_mail_module_t 这是mail模块的抽象接口,即ngx_module_t中的ctx成员所指向的mail模块特有接口。每一个mail模块都会实现自己的ngx_mail_module_t结构体。 typedef struct { // POP3 STMP IMAP邮件模块提取出的通用接口 ngx_mail_protocol原创 2015-08-26 13:28:29 · 1416 阅读 · 0 评论 -
《深入理解Nginx 模块开发与架构解析》笔记之定时器
Nginx 定时器Nginx 对时间的管理 Nginx为了提高速度,自己实现了对时间的管理,设计了数据结构和一些变量,存储在内存中。每一个进程都会单独地管理当前的时间。 ngx_time_ttypedef struct { //格林威治时间1970年1月1日凌晨0点0分0秒到当前时间的秒数 time_t sec; //sec成员只能精确到秒,mse原创 2015-07-31 15:38:01 · 656 阅读 · 0 评论 -
《深入理解Nginx 模块开发与架构解析》笔记之epoll事件模块
epollLinux epollLinux epoll工作模式水平触发LT边缘触发ET 前者是默认的,可以处理阻塞和非阻塞套接字,后者只能处理非阻塞套接字。Linux epoll原理 如上图所示,Linux中的epoll简单来说就是这样,用一个红黑树来存放所有epoll关心的事件,用一个双向链表来存放当前被激活的事件。 如何使用epollepoll_create原创 2015-07-30 23:11:46 · 2076 阅读 · 0 评论 -
Nginx HTTP过滤模块开发
Nginx 过滤模块HTTP过滤模块的开发步骤确定源代码文件名称;创建config脚本,当执行configure时将该目录添加进去;定义过滤模块,实例化ngx_module_t类型的模块结构;通过设置ngx_module_t结构中的ngx_command_t数组来处理感兴趣的配置项;实现初始化函数,初始化方法就是将ngx_http_output_header_filter_t和ngx_ht原创 2015-07-23 02:05:56 · 536 阅读 · 0 评论 -
《深入理解Nginx》笔记之ngx_event_pipe_s结构体
ngx_event_pipe_stypedef struct ngx_event_pipe_s ngx_event_pipe_t;// 处理接收自上游的包体的回调函数原型typedef ngx_int_t (*ngx_event_pipe_input_filter_pt)(ngx_event_pipe_t *p,原创 2015-08-21 15:30:08 · 1582 阅读 · 0 评论