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模块使用
前途。。。