
Nginx
文章平均质量分 84
yuanhaitaozz
啊啊啊啊啊啊啊啊
展开
-
Nginx基础知识. Nginx网络属性
Nginx基础概念先是对connection的概念介绍 nginx中的connection就是对tcp连接的封装, 其中包括连接的socket, 读事件, 写事件. 所以, 利用此connection, 就可以与任何后端服务打交道. nginx是如何处理一个连接的呢? 首先, nginx在启动时, 解析配置文件, 得到需要监听的端口与ip地址, 然后在n原创 2015-08-22 14:46:45 · 1209 阅读 · 0 评论 -
Ngixn基础. 认识Nginx事件模块(一)
对于Nginx的整体框架, 尚且只能了解个大概, 并不能弄清除整个流程. 索性先放着, 先了解其他组件.事件处理框架所要解决的问题是如何收集, 管理, 分发事件. 且事件类型主要为网络事件和定时器事件.既然需要支持跨平台, 那么就肯定要封装不同平台的事件驱动机制. 当然, 我只能看懂select, poll, epoll这几个... 那么Nginx是如何选择的呢? 1 . 之前在原创 2015-09-25 19:30:01 · 2679 阅读 · 0 评论 -
Nginx基础. epoll事件驱动模块
关于epoll事件驱动模块, 这里不做过多分析. 主要着眼于事件添加和事件处理上.static ngx_int_tngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags){ int op; uint32_t events,原创 2015-09-25 19:38:27 · 1081 阅读 · 0 评论 -
Nginx基础. 防止惊群与子进程之间的负载均衡
作为服务器子进程, 每个worker进程都需要处理大量网络事件. 而网络事件的处理来源于对监听端口新连接的建立.当有多个worker进程同时监听同一个(或多个)端口时, 建立连接就没那么简单了.Nginx出于充分发挥多核CPU性能的考虑, 则使用了多个worker子进程的设计. 这样多个子进程在accept建立连接时候就会有争抢, 产生"惊群"问题. 有的系统可能在内核就解决了这个问题,原创 2015-09-25 19:46:49 · 1352 阅读 · 0 评论 -
Nginx基础. Nginx中内存地址对齐(转)
下面的内容取自 http://segmentfault.com/a/1190000002771908 (侵删, 感谢)===========分割线===============当a为2的某个幂的值时(例如a=2^2=4,或a=2^3=8),有以下特点:a = 4: 二进制: 0000 0100 从右起,第三位为1,剩下全为0;a = 8: 二进制:转载 2015-09-12 10:49:17 · 825 阅读 · 0 评论 -
Nginx基础. Nginx基本哈希构成
回顾.下面这个函数是基本散列表的初始化函数. 在http://blog.youkuaiyun.com/u012062760/article/details/48140449中也介绍的比较详细了.ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names, ngx_uint_t nelts);具体的函数内容这里不再谈了原创 2015-09-12 11:21:27 · 504 阅读 · 0 评论 -
Nginx基础. Nginx通配散列表
之前学习过Nginx中的普通散列表, 关于其初始化以及整体的构造有了大致的了解.接下来就是在普通散列表的基础上, 分析更复杂的散列表构造. 因为Nginx作为一个Web服务器, 它的各种散列表中的关键字多以字符串为主, 特别是URI域名, 比如 www.ben.com.既然是这样, 那么Nginx就需要去支持带有通配符的主机域名, 即带"*"的域名, 包括前置通配符, 如 *.test原创 2015-09-12 11:21:53 · 2811 阅读 · 1 评论 -
Nginx基础知识. Nginx模块开发
Nginx模块开发初识 下面将开发一个简单的HTTP模块作为线索进行讲解.Part1. 模块需要使用的信息存储结构关于ngx_module_t既然要进行模块开发, 那么就必须会使用到存储模块的数据结构, 下面先看看这个结构体//因为是初识, 所以结构体的一些变量暂时不管typedef struct ngx_module_s ngx_module_t;struc原创 2015-08-25 11:04:01 · 841 阅读 · 0 评论 -
Nginx基础. 认识Nginx事件模块 (二)
对于事件模块, 定义此模块解析配置项的工作交给了ngx_events_module, 对于事件驱动机制, 更多的则是在ngx_event_core_module中进行的.相比于属于核心模块的ngx_events_module, ngx_event_core_module则属于事件模块.在ngx_modules.c文件中, ngx_event_core_module模块被放在了所有事件模块的原创 2015-09-25 19:31:40 · 479 阅读 · 0 评论 -
Nginx基础. eventfd, 异步IO 与epoll的相互协作
关于eventfd.对于eventfd, 这里只是简单的讲它的功能. 看manpage就足够了, 其中的例子也很容易看懂eventfd函数可以创建一个efd描述符, 该描述符在内核中维护着一个计数器counter. 在调用eventfd时, 可以传入参数指定内核中维护着的计数器的值.如果这样调用: int efd = eventfd(0, 0);那么计数器值为0.原创 2015-09-25 19:53:38 · 4235 阅读 · 5 评论 -
Nginx框架与模块
Nginx架构设计 Nginx架构设计的基础是高度的模块化设计. 除了少量的核心代码, 其他一切都是模块. 所有的模块都遵循同样的 ngx_module_t接口设计规范. 此结构体中的 ctx 成员是一个 void * 指针. 可以指向不同模块的不同数据, 一般用来表示在不同类型的模块中的一种类型模块所具备的通用性接口. 配置类型模块原创 2015-09-25 19:17:03 · 1059 阅读 · 0 评论 -
Nginx基础知识. Nginx内存池分析
Nginx内存池1. 内存池结构定义struct ngx_pool_s { ngx_pool_data_t d; //内存池的数据部分 size_t max; //内存池中, 每个内存块的最大数据容纳量 ngx_pool_t *current;原创 2015-08-29 19:38:47 · 448 阅读 · 0 评论 -
Nginx基础. Nginx数组与链表
ngx_array_t实现文件: ./src/core/ngx_array.h ./src/core/ngx_array.c1. 数据结构定义typedef struct { void *elts; //数组数据区起始位置 ngx_uint_t nelts; //当前存放元素个数 size_t原创 2015-08-29 19:43:42 · 1122 阅读 · 0 评论 -
Nginx---基础知识. Nginx特色
命令行控制:1. 默认启动方式: /usr/local/nginx/sbin/nginx这里的路径是 ./configure 的默认路径, 如果有指定新的路径, 则在新路径的相应文档下. 默认启动时, 会读取默认路径下的默认配置文件 /usr/local/nginx/conf/nginx.conf 2. 另一种指定配置文件的启动方式:使用 –c 参数指定原创 2015-08-17 15:22:41 · 703 阅读 · 1 评论 -
Nginx基础. Nginx基本哈希表
根据以往的学习经验, 比如STL中的哈希表, 利用开链法, vector+list作为容器, 当hashtable中的元素总数超过一定数量时, 选择扩充vector.再比如libevent中的哈希表, 与STL中的哈希表类似, 但比较复杂, 每个bucket中都可能有一个链表,每个链表元素中也可能存在一个链表. 但理解起来都并不复杂.现在看的Nginx中的哈希表, 则与上面谈到的哈希有很明原创 2015-08-31 22:33:42 · 3060 阅读 · 1 评论 -
Nginx基础. 开发HTTP过滤模块
1. HTTP过滤模块的地位, 作用与一般的HTTP模块是不同的, 一个请求可以被任意个HTTP过滤模块处理. 它所做的工作是对发送给用户的HTTP响应包做一些加工.相较于"普通的HTTP模块更倾向于完成请求的核心功能, 比如static模块负责静态文件的处", HTTP过滤模块则处理一些附加的功能, 比如gzip过滤模块可以把发送给客户的静态文件进行压缩后处理再发出去; image_fi原创 2015-09-08 23:06:39 · 1587 阅读 · 0 评论 -
Nginx基础. Nginx模块上下文
这里要提到的上下文是针对HTTP请求的, 每个HTTP请求对应于每一个HTTP模块都可以有一个独立的上下文结构体.(可以看出, 并不是一个HTTP请求的上下文由所有HTTP模块共享)每个请求对于每个模块的上下文结构体一般是在刚开始处理请求时在内存池分配它. 之后经过epoll, HTTP框架再次调用到HTTP模块的处理方法时, 这个HTTP模块可以由请求的上下文结构中获取信息. 在请求结束后,原创 2015-09-08 22:54:30 · 3115 阅读 · 0 评论 -
Nginx基础. Nginx配置解析
之前给出了配置简单模块的例子, 现在来仔细分析一下配置文件中的 http, server, location这三个部分.在配置文件中, 在http块下可以有多个server块, 在servre块下可以有多个location块, 在location块下仍然可以有location块.同一个配置项可以同时出现在多个http块, server块, 或是location块内.既然如此, 就远原创 2015-09-08 22:48:19 · 1640 阅读 · 0 评论 -
Nginx基础. HTTP过滤模块添加方式探讨
在学习Nginx中的过滤模块开发时, 遇到了使用全局变量和静态全局变量构成的单向函数链表, 对于我这种新手来说, 有些无法理解. 所以, 自己按照Nginx中构建链表的方式也写了一个小小的实验程序如下.整个框架:首先, 这是头文件. 用于制定每个模块需要的一些信息.只是这里因为程序太小太简陋, 所以不需要什么信息. 只需要每个模块的初始化函数. 初始化函数的用途会在下面讲/原创 2015-09-08 23:25:17 · 640 阅读 · 0 评论 -
Nginx基础. HTTP多阶段处理大致分析
HTTP处理阶段的规则:对于每个HTTP阶段, 它都包括checker检查方法和handler处理方法typedef struct ngx_http_phase_handler_s ngx_http_phase_handler_t;//一个HTTP处理阶段中的checker方法, 仅可以由HTTP框架实现, 以此控制HTTP请求的处理流程.typedef ngx_int_t (*ng原创 2015-10-15 19:32:02 · 806 阅读 · 0 评论