停用有问题的第三方模块只需注释nginx.conf中对应load_module行并执行nginx -t校验和nginx -s reload重载,即可零停机隔离模块;同时须清理配置中残留的该模块指令、共享内存及依赖项,避免重载失败或运行异常。

停用有问题的第三方模块,核心是快速隔离、安全生效、验证效果,不依赖重新编译,也不需要重启整个服务。
直接注释 load_module 行并重载
Nginx 从 1.9.11 开始支持动态模块(.so 文件),所有第三方模块都通过 load_module 指令显式加载。只要它没被硬编码进二进制,就能在运行时“软下线”。
操作步骤很简单:
- 打开
nginx.conf,找到类似这行:load_module modules/ngx_http_echo_module.so;
- 在前面加
#注释掉:#load_module modules/ngx_http_echo_module.so;
- 运行语法检查:
nginx -t - 重载配置:
nginx -s reload
Nginx 主进程会平滑终止旧 worker,并用新配置启动新 worker;旧 worker 处理完已有连接后自动退出,模块即刻失效,无需重启服务。
观察内存与行为是否回归正常
模块出问题常表现为:
- worker 进程 RSS 内存持续缓慢上涨(尤其压测后不回落)
- 特定请求路径返回异常(500、空响应、超时)
- error.log 中反复出现同一模块名的 warning 或 segfault 日志
重载后盯 5–10 分钟:
- 用
ps aux --sort=-%mem | grep nginx看 top 几个 worker 的内存趋势 - 用
tail -f logs/error.log | grep -i "echo\|myfilter\|lua"(替换为你的模块名)确认错误日志是否消失 - 发几轮相同请求(如
curl http://localhost/test-echo),看响应是否稳定
如果异常消失,基本可判定该模块是根因。
注意事项:别漏掉关联配置和残留影响
停用模块只是“不加载”,但配置里可能还留着它的指令,会导致 nginx -t 报错或运行时报错:
-
检查
server/location块中是否还有该模块的指令,例如:echo "hello"; lua_code_cache off; fancyindex on;
这些必须一并删除或注释,否则重载会失败。
若模块曾注册过共享内存区(如
shm_zone)、upstream、或自定义变量,也要清理对应配置,否则可能引发启动失败或资源泄漏。某些模块(如旧版 Lua 模块组合)依赖其他模块(如
ngx_devel_kit),需一起停用,避免符号未定义错误。
后续建议:定位问题再决定是否永久移除
临时停用只是应急手段。若确认模块确实有问题:
- 查看其 GitHub 仓库是否仍在维护、最近提交时间、issue 是否有同类报告
- 对比 Nginx 版本兼容性(例如
nginx-module-lua要求严格匹配主版本号) - 如非必需功能(如调试用的
echo、headers-more),建议直接移除,改用更轻量或内置方案替代
不复杂但容易忽略。


















