Nginx源码分析(5)

Nginx源码分析(5)

当需要为服务器增加一个自定义的扩展功能时,需要用到模块,相当于Nginx给开发者提供的一个模板范式。

比如现在实现一个书签收藏网站的signin功能,用Flask框架可以这样实现:

它实现的功能就是解析用户GETPOST过来的数据,然后构造相应的响应。这和Nginx的handler模块所做的工作相似。

Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。下图表示一次请求和相应的完整过程。

Nginx源码分析(5)

现在在浏览器中输入http://127.0.0.1/hello_world,让浏览器显示 hello_world, testing!!!怎么实现呢?这需要我们编写一个hello handler模块。


模块定义ngx_module_t

开发一个模块,需要定义一个ngx_module_t类型的变量来说明这个模块的信息。它定义在/nginx/src/core/ngx_config_file中。

hello模块定义如下:

模块的编写步骤是:

  • 编写模块基本结构。包括模块的定义,模块上下文结构,模块的配置结构等。
  • 实现handler的挂载函数。根据模块的需求选择正确的挂载方式。
  • 编写handler处理函数。模块的功能主要通过这个函数来完成。这是最关键的,hello模块的功能是简单返回一个字符串。在ngx_http_hello_world_handler中实现。

配置和编译

在Nginx文件夹下

ngx_http_hello_world_module.c是主要的函数,config是配置文件。

在配置文件中加入

这个config文件的内容就是告诉nginx的编译脚本,该如何进行编译。

add-module后接上文中新建目录的路径。


##使用

/usr/local/nginx/conf路径下的nginx.conf文件中加入

访问http://127.0.0.1/hello_world即可看见成功的页面。

Nginx源码分析(5)

0

发表评论

邮箱地址不会被公开。