《深入理解Nginx:模块开发与架构解析》一第3章 开发一个简单的HTTP模块 3.0

第3章 开发一个简单的HTTP模块

当通过开发HTTP模块来实现产品功能时,是可以完全享用Nginx的优秀设计所带来的、与官方模块相同的高并发特性的。不过,如何开发一个充满异步调用、无阻塞的HTTP模块呢?首先,需要把程序嵌入到Nginx中,也就是说,最终编译出的二进制程序Nginx要包含我们的代码(见3.3节);其次,这个全新的HTTP模块要能介入到HTTP请求的处理流程中(具体参见3.1节、3.4节、3.5节)。满足上述两个前提后,我们的模块才能开始处理HTTP请求,但在开始处理请求前还需要先了解一些Nginx框架定义的数据结构(见3.2节),这是后面必须要用到的;正式处理请求时,还要可以获得Nginx框架接收、解析后的用户请求信息(见3.6节);业务执行完毕后,则要考虑发送响应给用户(见3.7节),包括将磁盘中的文件以HTTP包体的形式发送给用户(见3.8节)。
本章最后会讨论如何用C++语言来编写HTTP模块,这虽然不是Nginx官方倡导的方式,但C++向前兼容C语言,使用C++语言开发的模块还是可以很容易地嵌入到Nginx中。本章不会深入探讨HTTP模块与Nginx的各个核心模块是如何配合工作的,而且这部分提到的每个接口将只涉及用法而不涉及实现原理,在第3部分我们才会进一步阐述本章提到的许多接口是如何实现异步访问的。

时间: 2024-08-17 21:48:47

《深入理解Nginx:模块开发与架构解析》一第3章 开发一个简单的HTTP模块 3.0的相关文章

《深入理解Nginx:模块开发与架构解析》一3.5 定义自己的HTTP模块

3.5 定义自己的HTTP模块 上文中我们了解了定义HTTP模块时需要定义哪些成员以及实现哪些方法,但在定义HTTP模块前,首先需要确定自定义的模块应当在什么样的场景下开始处理用户请求,也就是说,先要弄清楚我们的模块是如何介入到Nginx处理用户请求的流程中的.从2.4节中的HTTP配置项意义可知,一个HTTP请求会被许多个配置项控制,实际上这是因为一个HTTP请求可以被许多个HTTP模块同时处理.这样一来,肯定会有一个先后问题,也就是说,谁先处理请求谁的"权力"就更大.例如,ngx_

《深入理解Nginx:模块开发与架构解析》一3.4 HTTP模块的数据结构

3.4 HTTP模块的数据结构 定义HTTP模块方式很简单,例如: ngx_module_t ngx_http_mytest_module; 其中,ngx_module_t 是一个Nginx模块的数据结构(详见8.2节).下面来分析一下Nginx模块中所有的成员,如下所示: typedef struct ngx_module_s ngx_module_t; struct ngx_module_s { /* 下面的ctx_index.index.spare0.spare1.spare2.spare

jdbc-用eclipse做一个简单的注册模块,数据传不到数据库中

问题描述 用eclipse做一个简单的注册模块,数据传不到数据库中 用eclipse做一个简单的注册模块,输入用户名和密码,选择性别,按提交,将数据写如数据库,运行时出现的错误: HTTP Status 500 - javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'UserName' cannot be null 有

iOS开发:使用 UITableView 创建表格应用演练(1) 一个简单的表格应用

在很多iOS应用中都有UITableView控件的身影.让我们的系列教程也从UITableView开始吧. 目标 任何一个伟大的iOS应用都源自一个伟大的构想.虽然我们只是再做演练,但演练也同样需要一个伟大的构 想!这样我们会产生更加浓烈的兴趣,目标更加明确,同时不会纠结于具体的细节之中. 提示:细节是在不断重复中逐渐掌握的,过早的进入细节很容易让人迷失方向. 现在用微博的人越来越多,假设我们需要一个管理"微博关注人"的列表这么一个应用,能够 帮助我维护微博关注人的信息.怎么样?对于一

《深入理解Nginx:模块开发与架构解析》一2.4 用HTTP核心模块配置一个静态Web服务器

2.4 用HTTP核心模块配置一个静态Web服务器 静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现,当然,一个完整的静态Web服务器还有许多功能是由其他的HTTP模块实现的.本节主要讨论如何配置一个包含基本功能的静态Web服务器,文中会完整地说明ngx_http_core_module模块提供的配置项及变量的用法,但不会过多说明其他HTTP模块的配置项.在阅读完本节内容后,读者应当可以通过简单的查询相关模块(如ngx_http_gzip_f

《深入理解Nginx:模块开发与架构解析》一第2章 Nginx的配置2.1 运行中的Nginx进程间的关系

第2章 Nginx的配置 Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能.使用这些模块时,仅仅需要增加.修改一些配置项即可.因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的语法格式.运行所有Nginx服务必须具备的基础配置以及使用HTTP核心模块配置静态Web服务器的方法,最后还会介绍反向代理服务器. 通过本章的学习,读者可以:熟练地配置一个静态Web服务器:对影响Web服务器性能的各个配置项有深入的理解:对配置语法有全面的了解.通

《深入理解Nginx:模块开发与架构解析》一3.1 如何调用HTTP模块

3.1 如何调用HTTP模块 在开发HTTP模块前,首先需要了解典型的HTTP模块是如何介入Nginx处理用户请求流程的.图3-1是一个简化的时序图,这里省略了许多异步调用,忽略了多个不同的HTTP处理阶段,仅标识了在一个典型请求的处理过程中主要模块被调用的流程,以此帮助读者理解HTTP模块如何处理用户请求.完整的流程将在第11章中详细介绍.从图3-1中看到,worker进程会在一个for循环语句里反复调用事件模块检测网络事件.当事件模块检测到某个客户端发起的TCP请求时(接收到SYN包),将会

《深入理解Nginx:模块开发与架构解析》一3.2 准备工作

3.2 准备工作 Nginx模块需要使用C(或者C++)语言编写代码来实现,每个模块都要有自己的名字.按照Nginx约定俗成的命名规则,我们把第一个HTTP模块命名为ngx_http_mytest_module.由于第一个模块非常简单,一个C源文件就可以完成,所以这里按照官方惯例,将唯一的源代码文件命名为ngx_http_mytest_module.c. 实际上,我们还需要定义一个名称,以便在编译前的configure命令执行时显示是否执行成功(即configure脚本执行时的ngx_addon

《深入理解Nginx:模块开发与架构解析》一3.3 如何将自己的HTTP模块编译进Nginx

3.3 如何将自己的HTTP模块编译进Nginx Nginx提供了一种简单的方式将第三方的模块编译到Nginx中.首先把源代码文件全部放到一个目录下,同时在该目录中编写一个文件用于通知Nginx如何编译本模块,这个文件名必须为config.它的格式将在3.3.1节中说明.这样,只要在configure脚本执行时加入参数--add-module=PATH(PATH就是上面我们给定的源代码.config文件的保存目录),就可以在执行正常编译安装流程时完成Nginx编译工作.有时,Nginx提供的这种