NDK(ngx_devel_kit)模块学习

NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。

NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。

开发者如果要依赖这个模块做开发,需要将这个模块一并参与nginx编译,同时需要在自己的模块配置中声明所需要使用的特性。


1,ndk提供了一些宏简化操作,减少代码量也会间接减少失误:

比如nginx中经常有类似下面的申请内存的操作,个人感觉操作还是比较麻烦的。

ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_auth_request_ctx_t)
ndk提供了一个简便的方式

ndk_pallocp(ctx, r->pool);

比如对于数组的操作,ndk中定义的宏如下

#define     ndk_array_count(a)                  ((a)->nelts)
#define     ndk_array_get_first(a)              ((a)->elts)

还有配置信息的简化如下,我们可以只用一个宏代表原本两个宏的意义

#define     NDK_HTTP_MAIN_SRV_CONF                  NDK_HTTP_MAIN_CONF|NDK_HTTP_SRV_CONF

其它可以简化操作的宏(比如合并配置信息的操作)可以参照objs目录下面的文件,这里不一一列出

2,ndk提供一些设置nginx变量的工具,使得设置变量更加方便(需要用到rewrite module的模块),设置变量的操作也会在rewrite这个阶段得到处理

使用这些工具设置变量可以保证变量的设置顺序和conf文件里的顺序一致,因为它们统一的在rewrite阶段处理,你也不用去考虑实现v->get_handler函数。

ndk提供下面的变量类型:

 
  
    type use when there are these requirements
    ---- -------------------------------------
    NDK_SET_VAR_BASIC 0 variable values, no extra data
    NDK_SET_VAR_DATA 0 variable values, extra data
    NDK_SET_VAR_VALUE 1 variable value, no extra data
    NDK_SET_VAR_VALUE_DATA 1 variable value, extra data
    NDK_SET_VAR_MULTI_VALUE 2+ variable values, no extra data
    NDK_SET_VAR_MULTI_VALUE_DATA 2+ variable values, extra data
    NDK_SET_VAR_HASH the space needed for the result string
                                        value is known in advance (usually
                                        used in a hash function)
下面是设置相应类型变量的指针
 
  
    type prototype
    ---- ---------
    NDK_SET_VAR_BASIC ndk_set_var_pt
    NDK_SET_VAR_DATA ndk_set_var_data_pt
    NDK_SET_VAR_VALUE ndk_set_var_value_pt
    NDK_SET_VAR_DATA_VALUE ndk_set_var_value_data_pt
    NDK_SET_VAR_MULTI_VALUE ndk_set_var_value_pt
    NDK_SET_VAR_MULTI_VALUE_DATA ndk_set_var_value_data_pt
    NDK_SET_VAR_HASH ndk_set_var_hash_pt
首先需要定义一个变量 ngx_http_var_filter_t,设置它的四个属性

 
  
    type = (one of types above)
    func = function to call
    size = (for multi value) the number of variable values
           (for hash) length of buffer to allocate
    data = (for data functions) additional data (see note below)
example目录下有set_var的一个使用示例,实现配置文件中变量的concat操作。通过设置变量还能做什么好玩的尚待研究,暂时不熟


ndk还提供拓展的日志记录和方便配置上游服务器的权重的功能,可以结合其他upstream模块使用


前途。。。


你可能感兴趣的:(nginx,basic,function,服务器,filter,工具,Server)