nginx支持动态模块
来源:互联网 发布:arcgis js 热点格网图 编辑:程序博客网 时间:2024/05/16 11:41
之前一直以为nginx只支持静态模块,每次添加新模块的时候只能重新编译,最近在看nginx的源码,发现新版nginx已经支持进行动态加载模块。
通过模块动态加载指令load_module,我们可以在运行中修改nginx的配置,指定要加载的第三方模块,然后reload,是不是方便了很多。
core模块已经添加了相关的command:
{ ngx_string("load_module"),
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
ngx_load_module,
0,
0,
NULL },
对应的command handler如下:
static char *
ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
#if (NGX_HAVE_DLOPEN)
void *handle;
char **names, **order;
ngx_str_t *value, file;
ngx_uint_t i;
ngx_module_t *module, **modules;
ngx_pool_cleanup_t *cln;
if (cf->cycle->modules_used) {
return "is specified too late";
}
value = cf->args->elts;
file = value[1];
if (ngx_conf_full_name(cf->cycle, &file, 0) != NGX_OK) {
return NGX_CONF_ERROR;
}
cln = ngx_pool_cleanup_add(cf->cycle->pool, 0);
if (cln == NULL) {
return NGX_CONF_ERROR;
}
handle = ngx_dlopen(file.data);
if (handle == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ngx_dlopen_n " \"%s\" failed (%s)",
file.data, ngx_dlerror());
return NGX_CONF_ERROR;
}
cln->handler = ngx_unload_module;
cln->data = handle;
modules = ngx_dlsym(handle, "ngx_modules");
if (modules == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ngx_dlsym_n " \"%V\", \"%s\" failed (%s)",
&value[1], "ngx_modules", ngx_dlerror());
return NGX_CONF_ERROR;
}
names = ngx_dlsym(handle, "ngx_module_names");
if (names == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ngx_dlsym_n " \"%V\", \"%s\" failed (%s)",
&value[1], "ngx_module_names", ngx_dlerror());
return NGX_CONF_ERROR;
}
order = ngx_dlsym(handle, "ngx_module_order");
for (i = 0; modules[i]; i++) {
module = modules[i];
module->name = names[i];
if (ngx_add_module(cf, &file, module, order) != NGX_OK) {
return NGX_CONF_ERROR;
}
ngx_log_debug2(NGX_LOG_DEBUG_CORE, cf->log, 0, "module: %s i:%ui",
module->name, module->index);
}
return NGX_CONF_OK;
#else
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"load_module\" is not supported "
"on this platform");
return NGX_CONF_ERROR;
#endif
}
- nginx支持动态模块
- Nginx mp4支持模块
- Nginx 动态添加模块
- nginx使用ssl模块配置HTTPS支持
- NGINX 添加MP4、FLV视频支持模块
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx 配置 ssl 模块支持 https
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- nginx使用ssl模块配置HTTPS支持
- 跬步系列 - NLP
- 二进制小数的循环期-Period of an Infinite Binary Expansion
- GLSL中环境映射&菲涅尔反射效果
- Openjudge NOI题库2.4基本算法之分治 7620:区间合并
- RabbitMQ消息队列(二):”Hello, World“
- nginx支持动态模块
- python自动监控日志,发邮件通知
- c++ lua服务器框架
- RecyclerView的入门使用
- Java多线程中join方法的理解
- PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
- Two pointers (8) -- Minimum Window Substring
- Enum底层实现初探(一)
- 范例解析:学习Android的IPC主板模式