nginx--源码
山西茄子
多媒体工程师,从事ffmpeg,gstreamer,视频编码,deepstream等开发,做做笔记。
展开
-
nginx之ngx_http_limit_req
配置 http{limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /{ limit_req zone=one burst=5; } }} 以上的例子,客户端IP作为了一个键值。注转载 2016-07-02 10:43:39 · 1188 阅读 · 0 评论 -
nginx处理http
ngx_http_read_client_request_body HTTP包体的长度有可能非常大,如果试图一次性调用并读取完所有的包体,那么多半会阻塞Nginx进程。HTTP框架提供了一种方法来异步地接收包体: ngx_int_t ngx_http_read_client_request_body(ngx_http_request_t *r, ngx_http_clien转载 2017-01-22 15:32:23 · 1274 阅读 · 0 评论 -
nginx之共享内存
常用函数ngx_shmtx_create()创建ngx_shmtx_destory()销毁ngx_shmtx_trylock()尝试加锁(加锁失败则直接返回,不等待)ngx_shmtx_lock()加锁(持续等待,直到加锁成功)ngx_shmt转载 2016-06-29 18:34:14 · 4370 阅读 · 0 评论 -
nginx的hash
ngx_hash_t结构typedef struct { //hash元素结构 void *value; //value,即某个key对应的值,即中的value u_short len; //name长度 u_char name[1]; //某个要hash的数转载 2017-07-26 10:24:23 · 379 阅读 · 0 评论 -
nginx源码分析
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。typedef struct {u_char *last;转载 2016-05-25 14:58:09 · 1574 阅读 · 0 评论 -
Nginx中的原子操作
原子操作在系统编程中属于基础工具。nginx与其他软件很不一样,它几乎把所有操作系统的功能都封装了一遍,估计是出于编程一致性和可移植性的考虑。对于原子操作,nginx提供一组接口。这里我们只研究有GCC 4.1以上版本的情况,因为nginx对不同的情况有不同的实现,GCC应该还是比较普遍的吧先看些基本类型typedef long ngx_atomic_int_t;type转载 2017-05-17 09:48:54 · 1514 阅读 · 1 评论 -
nginx源码阅读
ngx_alloc.c分配内存的封装ngx_daemon_c创建守护进程。ngx_thread_cond.c 条件变量的封装。ngx_recv.c socket收的封装ngx_send.csocket发的封装ngx_shmem.c共享内存的封装ngx_socket.csocket操作的封装ngx_thread_m原创 2017-01-18 19:13:41 · 434 阅读 · 0 评论 -
nginx红黑树
插入向红黑树中插入节点,有可能破坏红黑树的性质,这时就需要调整红黑树,哪些情况会破坏红黑树的性质呢?下面三种情况会破坏红黑树的性质:1)如果当前结点的父结点是红色且祖父结点的另一个子结点(叔叔结点)是红色2)当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子3)当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子下面是这三种情况的对应调整方法(这里只是转载 2017-01-08 15:41:34 · 568 阅读 · 0 评论 -
ngx_connection_s
struct ngx_connection_s { void *data; ngx_event_t *read; ngx_event_t *write; *data,用来关联其他的ngx_connection_s结构体。 *转载 2016-10-21 10:56:42 · 702 阅读 · 0 评论 -
nginx-filter
filter对应HTTP请求的响应头和响应体,Nginx分别设置了header filter和body filter。两种机制都是采用链表的方式,不同过滤模块对应链表的一个节点,一般而言一个模块会同时注册header filter和body filter。一个典型的filter模块,比如gzip模块使用类似如下的代码来注册:[cpp] view plain copy转载 2016-11-09 17:05:19 · 503 阅读 · 0 评论 -
nginx对静态文件cache的处理分析
Nginx中对静态文件进行了Cache,对应的配置项是open_file_cache,open_file_cache_min_uses以及open_file_cache_valid。这次我就来分析下nginx如何对静态文件进行cache的。要注意一个就是open_file_cache的 inactive表示文件多久不被访问就会从cache中删除。 首先来描述一下Linux下是如何做转载 2016-11-03 16:33:28 · 561 阅读 · 0 评论 -
nginx之链表
nginx的链表(头)结构为ngx_list_t,链表节点结构为ngx_list_part_t,定义如下。typedef struct ngx_list_part_sngx_list_part_t;struct ngx_list_part_s { //链表节点结构 void *elts; //指向该节点实际的数据区(该数据区中可以存放nallo转载 2016-06-29 17:38:35 · 414 阅读 · 0 评论 -
nginx编译
configure 命令做了大量的“幕后”工作, 包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些 C 源码文件、Makefile 文件等。make命令根据configure命令生成的 Makefile 文件编译 Nginx 工程, 并生成目标文件、 最终的二进制文件。make install 命令根据 configure 执行时的参数将 Nginx 部署到转载 2017-03-01 16:47:58 · 1652 阅读 · 0 评论