NGINX加载动态库相关问题

本文介绍了在NGINX中动态加载库的方法,通过在read_conf事件处理函数加载动态库,并在主进程handler中调用相应函数。强调了动态库只需处理请求内容和输出缓冲区的修改,而输出、转发等控制应保留在主进程。同时提醒在编译动态库时添加-g标志以便于调试。
摘要由CSDN通过智能技术生成

 

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 *

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值