考虑一个简单的NGINX模块:
typedef struct {
ngx_array_t *claims;
} my_conf_t
static ngx_command_t my_commands[] = {
{ ngx_string("my_claims"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_conf_set_str_array_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(my_conf_t, claims),
NULL },
ngx_null_command
};
static ngx_http_module_t my_module_ctx = {
NULL,
my_module_init,
NULL,
NULL,
NULL,
NULL,
my_module_create_loc_conf,
my_module_merge_loc_conf
};
ngx_module_t my_module = {
NGX_MODULE_V1,
&my_module_ctx,
my_commands,
NGX_HTTP_MODULE,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NGX_MODULE_V1_PADDING
};
甚至在模块中的其他地方都没有使用claims
,当使用我的新配置选项时,在nginx -t
期间会抛出一个分段错误:
location / {
my_claims test;
return 200 OK;
}
该配置在注解/删除位置时抛出分段错误,从而允许nginx -t
成功。
我看了NGINX Mail SSL模块的例子(这里和here),我不知道我错过了什么。
1条答案
按热度按时间2w2cym1i1#
简单的答案是它会segfaults,因为你的模块不完整。你需要注册配置指令,等等。
这还不够,最好检查一些开源的NGINX模块,并将它们用作样板。