之前一直以為nginx只支援靜態模組,每次新增新模組的時候只能重新編譯,最近在看nginx的原始碼,發現新版nginx已經支援進行動態載入模組。
通過模組動態載入指令load_module,我們可以在執行中修改nginx的配置,指定要載入的第三方模組,然後reload,是不是方便了很多。
core模組已經新增了相關的command: ,
對應的command handler如下:
static char *
ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
value = cf->args->elts;
file = value[1];
if (ngx_conf_full_name(cf->cycle, &file, 0) != ngx_ok)
cln = ngx_pool_cleanup_add(cf->cycle->pool, 0);
if (cln == null)
handle = ngx_dlopen(file.data);
if (handle == null)
cln->handler = ngx_unload_module;
cln->data = handle;
modules = ngx_dlsym(handle, "ngx_modules");
if (modules == null)
names = ngx_dlsym(handle, "ngx_module_names");
if (names == null)
order = ngx_dlsym(handle, "ngx_module_order");
for (i = 0; modules[i]; i++)
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模組依賴 nginx的一些模組需要第三方支援,例如gzip模組需要zlib庫,rewrite模組需要pcre庫,ssl功能需要openssl庫。根據需求新增不同模組 例新增echo模組 詳情請看 當前nginx版本為 1.12.2,選擇echo版本為0.61 8.1.1.修改nginx.c...
Nginx 動態新增模組
這個在工作中遇到的其中乙個活生生的例子,因為nginx在編譯安裝的時候並沒有考慮太多,而且我一向的做法都是按照專案需要安裝相應的功能,盡量讓服務和應用簡潔。我一向的作風 configure prefix path to nginx?是不是夠簡潔,僅僅乙個安裝路徑。如果兄弟們覺有欠妥的話,請直接批評我...
nginx載入動態模組
不使用動態模組時 使用動態模組 不是所有的nginx模組都可以以動態模組方式加入nginx 載入方式參見nginx模組載入 需要注意的是 with http image filter module dynamic 如果採用動態模組的載入方式,那麼需要將 usr local src nginx 1.8...