摘要:1. 限流算法 ngx_http_limit_req_module 使用桶算法, 定义一个桶,桶的出口流速固定,入口流速大于出口时,请求被缓存在桶中, 定义桶的容积,当请求超过容积,则丢弃请求。 limit_req_zone : 定义一个桶,且定义桶的出口流速 limit_req : 定义使用桶,和
阅读全文
摘要:1. configure 添加模块 1.1 添加一个 http 模块 在./src/test下创建config 内容如下 # 定义模块名称 1 ngx_addon_name=ngx_http_test_module # 向http类添加 新模块 2 HTTP_MODULES="$HTTP_MODUL
阅读全文
摘要:1. location 指令 配置解析 1.1 指令格式 location配置支持如下格式, location 的参数是 uri, 可以是模糊的,也可以是绝对的 1.2 配置解析——生成loc树 2949 static char * 2950 ngx_http_core_location(ngx_c
阅读全文
摘要:0. 简介 共享内存是ngx实现 进程间 全局对象 的方法, 比如 一个抗cc模块,需要记录 cc数据,但 进程间内存隔离,导致 工作进程 只能记录访问自己的 cc数据, 所以需要申请一个共享内存,在共享内存上构造cc数据,多个工作进程互斥操作 该对象。 1 ngx_shm_zone_t 25 ty
阅读全文
摘要:1. 有哪些内存池 init_cycle.pool : 用于初始化时使用,初始化后一定被释放 196 main(int argc, char *const *argv) 253 init_cycle.pool = ngx_create_pool(1024, log); 292 cycle = ngx
阅读全文
摘要:1. 读文件 1.1 读配置文件 1.1.1 打开文件 除了 获得文件描述符,还获得 文件信息 struct stat,这些信息都存放在 ngx_file_t 并使用 ngx_buf_t 用于缓存文件内容 而 ngx_file_t 和 ngx_buf_t 组合成 ngx_conf_file_t 15
阅读全文
摘要:0. 什么是upstream 如,ngx通过proxy模块,将请求转发给上游http服务器,并最终返回给客户端。ngx通过cgi,将请求转发给php服务器,并返回给客户端。 1. 配置解析 简单配置如下 http { upstream { server localhost:8080; server
阅读全文
摘要:请求处理一定的流程是 创建监听套接字 接受连接 读取数据,解析请求 1. 监听套接字 1.1 加载配置——listen指令 ngx加载完 listen指令后会构造如上结构。 可见,ngx以 端口号为一个单位排布: 比如 80端口 : 127.0.0.1 192.168.1.1 8080端口: 192
阅读全文
摘要:1. ngx对变量性质的定义 用户可以在配置文件中使用变量,如 http_user_agent 就是变量,如上会根据 若使用IE访问 重写url。 ngx变量只有字符串类型,可以有用户定义的配置赋值,也可以由 ngx 自动赋值(如上,每次收到请求 自动对 http_user_agent 赋值)。 变
阅读全文
摘要:1. 综述 ngx 是事件驱动,没有事件,ngx会一直阻塞在 epoll_wait 或 sigsuspend 上,ngx的事件有 IO事件,定时器事件。 2. 多路IO模型 ngx对多路复用IO进行了封装。 封装为 ngx_event_action_t 结构体,该结构体主要属性为 回调函数 为了方便
阅读全文
摘要:1. 模块机制 ngx模块大致分为: handlers: 协同完成客户端处理,产生数据。 filters : 对handlers产生的数据进行各种过滤处理(增,删,改)。 upstream : 如果存在真实后端服务器,ngx可用upstream模块充当反向代理。 load-balance : 当ng
阅读全文
摘要:1. 配置格式定义 1.1 配置项 ngx定义了两种配置项, 简单,以 ; 结尾 复杂,以 {} 结尾 由于简单为;结尾,所以可以直接分行写 1.2 上下文 复杂匹配项有上下文,实现继承。 2. 指令定义 ngx定义了一些指令,模块自己可以定义指令。 如 daemon 指令 ngx定义指令对象为 n
阅读全文
摘要:1. ngx_str_t 2. ngx_list_t 3. ngx_array_t 4. ngx_queue_t 5. ngx_pool_t 6. ngx_hash_t 7. ngx_radix_tree_t
阅读全文
摘要:1. 进程工作 ngx是多进程模型:work进程,master进程,cache进程。 ngx还使用 upstream等模块实现和 其他服务器通信 master和worker进程工作流程如下 可以看出 用户使用信号控制 监控进程,监控进程 控制工作进程 监控进程主要处理 用户的信号, 监控进程使用 s
阅读全文
摘要:1. gdb调试 编译带调试信息的ngx ./configure --with-cc-opt='-g -O0' CFLAGS='-g -O0' ./configure make CFLAGS='-g -O0' gdb -p 3333 (gdb)attach 3333 若要gdb支持查看宏定义,需要
阅读全文