1.目的:一个handler的功能可以随着业务变化不断修改,如果静态编译的话nginx本身要经常编译,稳定性得不到保证。
所以在需要的点上先写好一个稳定的handler,然后由它来加载动态库,以后的维护就放在动态库中,只编译动态库。虽然损失百分之几的性能,
但可维护性大大增加。
2.方法:在read_conf事件处理函数中根据配置加载动态库并将句柄保存到loc_conf中,然后在每次请求的时候获取这个句柄调用。
read_conf时:
ngx_test_loc_conf_t *cglcf;
cglcf = ngx_http_conf_get_module_loc_conf(cf, ngx_module_test);
char dllpath[4096] = {0};
memcpy(dllpath, cglcf->ecdata.data, cglcf->ecdata.len);
cglcf->dllHandle = dlopen(dllpath, RTLD_LAZY);
if (cglcf->dllHandle == NULL) {
printf("could not load %s: %s\n", dlerror(), dllpath);
}
然后在主进程hadler中:
ngx_test_loc_conf_t *cglcf;
cglcf = ngx_http_get_module_loc_conf(r, ngx_module_test);
void *