Nginx 模块基本结构.pdfVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Nginx 模块的基本结构 模块的基本结构 在这⼀节我们将会对通常的模块开发过程中,每个模块所包含的⼀些常⽤的部分进⾏ 明。这些部分有些是必须的,有些不是必须的。同时这⾥所列出的这些东西对于其 他类型的模块,例如 filter 模块等也都是相同的。 模块配置结构 基本上每个模块都会提供⼀些配置指令,以便于⽤户可以通过配置来控制该模块的⾏ 为。那么这些配置信息怎么存储呢?那就需要定义该模块的配置结构来进⾏存储。 ⼤家都知道 Nginx 的配置信息分成了⼏个作⽤域(scope ,有时也称作上下⽂) ,这就是 main ,server 以及 location 。同样的每个模块提供的配置指令也可以出现在这⼏个作⽤ 域⾥。那对于这三个作⽤域的配置信息,每个模块就需要定义三个不同的数据结构去 进⾏存储。当然,不是每个模块都会在这三个作⽤域都提供配置指令的。那么也就不 ⼀定每个模块都需要定义三个数据结构去存储这些配置信息了。视模块的实现⽽⾔, 需要⼏个就定义⼏个。 有⼀点需要特别注意的就是,在模块的开发过程中,我们最好使⽤ Nginx 原有的命名 习惯。这样跟原代码的契合度更⾼,看起来也更舒服。 对于模块配置信息的定义,命名习惯是ngx_http_module name_(main|srv |loc)_conf_t。这⾥有个例⼦,就是从我们后⾯将要展⽰给⼤ 家的 hello module 中截取的。 typedef struct { ngx_str_t hello_string; ngx_int_t hello_counter; }ngx_http_hello_loc_conf_t; 模块配置指令 ⼀个模块的配置指令是定义在⼀个静态数组中的。同样地,我们来看⼀下从 hello module 中截取的模块配置指令的定义。 static ngx_command_t ngx_http_hello_commands[ = { { ngx_string(hello_string), NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1, ngx_http_hello_string, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_hello_loc_conf_t, hello_string), NULL }, { ngx_string(hello_counter), NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, ngx_http_hello_counter, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_hello_loc_conf_t, hello_counter), NULL }, ngx_null_command }; 其实看这个定义,就基本能看出来⼀些信息。例如,我们是定义了两个配置指令,⼀ 个是叫 hello_string ,可以接受⼀个参数,或者是没有参数。另外⼀个命令是 hello_counter ,接受⼀个 NGX_CONF_FL G 类型的参数。除此之外,似乎看起来有 点迷惑。没有关系,我们来详细看⼀下 ngx_command_t ,⼀旦我们了解这个结构的详 细信息,那么我相信上述这个定义所表达的所有信息就不⾔⾃明了。 ngx_command_t 的定义,位于src/core/ngx_conf_file.h中。 struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_conf_t *cf, ngx_command_t ngx_uint_t conf;

文档评论(0)

00625 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档