Nginx学习笔记(二)

本文介绍了Nginx中的Handler模块,包括模块简介、基本结构、配置指令、模块上下文结构、挂载方法以及hello handler模块的实现和使用。Handler模块主要负责处理客户端请求并生成输出,通过location指令配置,并可在不同处理阶段挂载。
摘要由CSDN通过智能技术生成

Handler 模块

Handler 模块简介

Handler 模块就是接受来自客户端的请求并产生输出的模块。

配置文件中使用 location 指令可以配置 content handler 模块,当 Nginx 系统启动的时候,每个 handler 模块都有一次机会把自己关联到对应的 location上。如果有多个 handler 模块都关联了同一个 location,那么实际上只有一个 handler 模块真正会起作用。

handler 模块处理的结果通常有三种情况: 处理成功,处理失败(处理的时候发生了错误)或者是拒绝处理。在拒绝处理的情况下,这个 location 的处理就会由默认的 handler 模块来进行处理。

模块基本结构

模块配置结构

Nginx 的配置信息分成了几个作用域(scope),这就是 main,server 以及 location。同样的每个模块提供的配置指令也可以出现在这几个作用域里。那对于这三个作用域的配置信息,每个模块就需要定义三个不同的数据结构去进行存储。不过不是每个模块都会在这三个作用域都提供配置指令的,所以不一定每个模块都需要定义三个数据结构去存储这些配置信息了。

对于模块配置信息的定义,命名习惯如下

ngx_http_<module name>_(main|srv|loc)_conf_t

例如:

typedef struct{ ngx_str_t hello_string; ngx_int_t hello_counter; }ngx_http_hello_loc_conf_t;

模块配置指令

一个模块的配置指令定义在一个静态数组中。

ngx_command_t 的定义如下:

struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); ngx_uint_t conf; ngx_uint_t offset; void *post; };

name: 配置指令的名称。

type: 该配置的类型,准确地说,是该配置指令属性的集合。Nginx 提供了很多预定义的属性值(一些宏定义),通过逻辑或运算符可组合在一起,形成对这个配置指令的详细的说明。下面列出可在这里使用的预定义属性值及说明。

  • NGX_CONF_NOARGS:配置指令不接受任何参数。
  • NGX_CONF_TAKE1:配置指令接受 1 个参数。
  • NGX_CONF_TAKE2:配置指令接受 2 个参数。
  • NGX_CONF_TAKE3:配置指令接受 3 个参数。
  • NGX_CONF_TAKE4:配置指令接受 4 个参数。
  • NGX_CONF_TAKE5:配置指令接受 5 个参数。
  • NGX_CONF_TAKE6:配置指令接受 6 个参数。
  • NGX_CONF_TAKE7:配置指令接受 7 个参数。

可以组合多个属性,比如一个指令即可以不填参数,也可以接受1个或者2个参数。那么就是NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2。如果写上面三个属性在一起,你觉得麻烦,那么Nginx 提供了一些定义,使用起来更简洁。

  • NGX_CONF_TAKE12:配置指令接受 1 个或者 2 个参数。
  • NGX_CONF_TAKE13:配置指令接受 1 个或者 3 个参数。
  • NGX_CONF_TAKE23:配置指令接受 2 个或者 3 个参数。
  • NGX_CONF_TAKE123:配置指令接受 1 个或者 2 个或者 3 参数。
  • NGX_CONF_TAKE1234:配置指令接受 1 个或者 2 个或者 3 个或者 4 个参数。
  • NGX_CONF_1MORE:配置指令接受至少一个参数。
  • NGX_CONF_2MORE:配置指令接受至少两个参数。
  • NGX_
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值