
Nginx
文章平均质量分 77
gswen
这个作者很懒,什么都没留下…
展开
-
nginx源码剖析--从main函数开始
八九月份找好工作之后,着实懒散了一段时间。现在回想起来,九月份没有做一件有意义的事情,成天都是胡思海想。现在工作基本上定下来了,打算这段时间直到毕业,好好学习几个方面的知识:后台开发数据存储后台开发上主要是打算吃透nginx。为了达到这个目的,这段时间会写一系列的nginx源码剖析的文章。由于水平实在有限,可能会写相当长的时间,并且写的时候也会有许多问题。不过我总是会尽自己最大的努力的。想起来原创 2017-09-30 14:22:52 · 913 阅读 · 0 评论 -
Nginx源码剖析--HTTP请求各阶段的具体作用
前言Nginx将HTTP请求分为11各阶段进行处理。每个阶段包含零到多个handler处理函数。分阶段处理的目的是增加灵活性,方便模块介入。HTTP请求处理主要分为一下11个阶段:typedef enum { NGX_HTTP_POST_READ_PHASE = 0, NGX_HTTP_SERVER_REWRITE_PHASE, //对server对应的uri的转换 NGX_HT原创 2017-11-26 10:37:29 · 744 阅读 · 0 评论 -
Nginx源码剖析--ngx_http_optimize_servers函数分析
前言本章将继续介绍HTTP模块初始化函数:ngx_http_block中的内容。将会涉及到server块的组织,监听端口的管理,以及ip地址和server块之间的组织关系。下面我们将从listen关键字说起,然后根据listen配置项以及它的解析函数了解nginx组织server块和监听端口的过程。最后在介绍ngx_http_optimize_servers函数。所有这些工作都是为了实现Nginx的原创 2017-12-03 00:13:21 · 1055 阅读 · 0 评论 -
Nginx源码剖析--HTTP请求的分阶段处理的初始化
前言Nginx作为一个http服务器,核心任务就是处理HTTP请求。在接收到请求时,Nginx框架首先解析http请求,将解析结果放在ngx_http_request中,由于http是在tcp上工作的,因此解析可能会持续一段时间。nginx用状态机完成对HTTP请求的异步解析。整个解析过程都是由Nginx框架代码完成,不需要用户介入。当解析得到完整的http请求后,就开始处理http请求。ng原创 2017-11-16 15:42:57 · 633 阅读 · 0 评论 -
Nginx源码剖析--server和location的组织
前言我们知道,Nginx的配置文件的http块中一般会存在多个server块,每个server块中也会有多个locations块,而每个location块中也允许有多个location块。前面我们在分析http模块的配置结构体的时候也看到,这些块是通过上一级的ngx_http_core_module模块创建的配置结构体管理的。比如http块中的所有server块都是由ngx_http_core_mo原创 2017-11-04 17:04:37 · 1625 阅读 · 0 评论 -
Nginx源码剖析--HTTP模块初始化概述
前言前面讲了HTTP模块配置结构体的组织以及各个server,location块为了能够实现快速查找而使用的组织数据结构。这些内容都属于HTTP模块的初始化部分。除了之前讲的内容之外,HTTP初始化还包括其他内容。我们将在这部分讲述这些内容。对HTTP模块的初始化是从‘ http’关键字开始的。也就是说,当配置文件解析器在配置文件中读到http关键字,则会开始根据http块中的配置信息初始化http原创 2017-11-10 15:40:34 · 897 阅读 · 0 评论 -
Nginx源码剖析--event类型模块
目录目录前言核心模块几种event模块ngx_event_core_moduleepoll和kqueue等功能性的event模块嵌入到Nginx框架中总结前言前面梗概介绍了Nginx模块配置的信息。简单地说,nginx的灵活性主要归功于他的高度模块化和可配置性。其中可配置性依赖于配置文件。在nginx中,模块就是一个struct类型的全局变量。Nginx通过为每个模块维护一个配置结构体原创 2017-10-13 13:57:59 · 743 阅读 · 0 评论 -
Nginx源码剖析--HTTP模块配置结构体在conf_ctx中的组织
前言http模块配置结构体组织架构问题解决方案总结前言上一篇文章介绍了event模块的配置结构体的初始化以及模块中的一些初始化函数,比如init_process函数。这些工作都是在服务器启动之前必须完成的。 在介绍event模块的配置结构体初始化时,我们知道event模块的解析是从events{}“events”关键字开始的。也就是说与event模块相关的所有配置项都必须在配置文件的ev原创 2017-10-21 15:00:40 · 1292 阅读 · 2 评论 -
Nginx源码剖析--HTTP模块配置信息的merge
前言考虑有如下形式的配置文件:http{ .... server { ..... location { ..... } }}根据前面的讲解,Nginx会为每个http块,server块和location块创建一个ngx_http_conf_ctx_t结构体。这个结构体主要是为了管理各个模块的main_conf,srv原创 2017-10-27 15:08:20 · 694 阅读 · 0 评论 -
Nginx源码剖析--模块配置信息初始化
目录目录前言关于conf_ctxNginx中的模块Nginx模块的形式ngx_module_s配置文件解析框架前言前面在介绍ngx_cycle_t结构体的初始化时,我们深入到了ngx_cycle_init函数中。在那里我们说过,对ngx_cycle_t->conf_ctx的初始化是占篇幅最大的一部分。而之前我们在介绍ngx_cycle_t结构体中原创 2017-10-01 13:21:45 · 649 阅读 · 0 评论 -
Nginx源码剖析--ngx_cycle_t的初始化
前言前一篇介绍了ngx_cycle_t中各个成员的具体含义,虽然许多成员具体作用和实现方式我们没有深究,但也有了一个初步的了解。这篇文章将介绍ngx_cycle_t的初始化过程,主要是在ngx_init_cycle函数中完成的,之所以说主要,因为ngx_cycle_t的初始化还会依赖于一个old_cycle,这个old_cycle的初始化是在main中完成的。ngx_init_cycle的函数原型如原创 2017-09-30 19:19:14 · 915 阅读 · 0 评论 -
Nginx源码剖析--ngx_cycle_s结构体分析
前言Nginx框架是围绕着ngx_cycle_t结构体运行的。ngx_cycle_t结构体中包含的信息主要可以分为以下部分:所有模块的配置信息Nginx运行时所需要的一些资源,包括连接池,内存池,打开文件,操作目录等等本文将详细介绍ngx_cycle_t结构体所包含的内容。ngx_cycle_t结构体的内容struct ngx_cycle_s { //保存所有模块的配置结构体原创 2017-09-30 16:03:02 · 1497 阅读 · 0 评论 -
Nginx源码剖析--连接池
前言NGINX是一个http服务器。http基于tcp协议,tcp是基于连接的协议。也就是每个http请求都要在某个TCP连接上。在NGINX中,用一个结构体表示连接:struct ngx_connection_s每个连接都用一个ngx_connection_s结构体表示。每次监听socket accept到一个新的连接都会”新建”一个新的ngx_connection_s对应到这个原创 2017-12-15 22:20:14 · 947 阅读 · 0 评论