You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Nginx中添加Lua模块遇阻:access_by_lua_file指令报错求助

解决Nginx中access_by_lua_file指令未知的问题

首先明确:添加include语句无法解决这个问题,因为access_by_lua_file是lua-nginx-module提供的专属指令,你的RPM版Nginx并没有加载这个模块,所以才会报「unknown directive」错误。下面结合你的环境(无外网、已有OpenResty)给出几个可行的解决方案:

方案一:直接使用已安装的OpenResty(最推荐)

你服务器上已经存在/opt/openresty/路径的OpenResty,而OpenResty本身就集成了lua-nginx-module(这也是OpenResty的核心特性之一),完全不用额外折腾模块编译:

  • 先确认OpenResty的Nginx执行路径:/opt/openresty/nginx/sbin/nginx
  • 将你当前的Nginx配置(包含access_by_lua_file的server块)复制到OpenResty的配置目录,一般是/opt/openresty/nginx/conf/(可以覆盖原nginx.conf,或者在conf.d下新建配置文件)
  • 测试配置是否合法:
    /opt/openresty/nginx/sbin/nginx -t
    
  • 如果测试通过,启动或重载OpenResty:
    /opt/openresty/nginx/sbin/nginx -s reload
    

这个方案的优势是零编译、无依赖问题,直接利用现成的集成环境,最适合你的无外网场景。

方案二:给RPM版Nginx动态加载lua-nginx-module(仅当Nginx支持动态模块时)

首先检查你的RPM版Nginx是否支持动态模块:

nginx -V

查看输出中是否包含--with-compat和--add-dynamic-module这类参数,如果有,说明支持动态加载模块,步骤如下:

  1. 离线准备编译资源:
    • 下载与你当前Nginx版本(1.12)完全一致的源码包(可以从RedHat官方镜像站离线获取对应版本的src.rpm,解压后得到源码)
    • 确保你已经解压了lua-nginx-module-0.10.13到/etc/nginx/modules/目录
  2. 编译动态模块:
    进入Nginx源码目录,执行:
    ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-compat --add-dynamic-module=/etc/nginx/modules/lua-nginx-module-0.10.13
    make modules
    
    编译完成后,会在源码目录的objs文件夹下生成ngx_http_lua_module.so文件
  3. 加载模块:
    将ngx_http_lua_module.so复制到Nginx的模块目录(一般是/usr/lib64/nginx/modules/),然后在/etc/nginx/nginx.conf的最顶部添加:
    load_module modules/ngx_http_lua_module.so;
    
  4. 验证并重启:
    nginx -t && systemctl restart nginx
    

方案三:离线编译集成lua-nginx-module的自定义Nginx

如果你的RPM版Nginx不支持动态模块,只能选择重新编译Nginx并集成lua-nginx-module:

  1. 离线安装依赖:
    从RedHat镜像站下载并安装以下依赖包(全部离线RPM):
    • pcre-devel、zlib-devel、openssl-devel(Nginx基础编译依赖)
    • lua-devel(系统自带Lua 5.1.4的开发包,编译模块需要)
      执行安装:
    rpm -ivh pcre-devel*.rpm zlib-devel*.rpm openssl-devel*.rpm lua-devel*.rpm
    
  2. 编译Nginx:
    进入Nginx 1.12源码目录,执行configure命令(路径根据你的实际情况调整):
    ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --add-module=/etc/nginx/modules/lua-nginx-module-0.10.13 --with-lua=/usr
    
    然后编译安装:
    make && make install
    
  3. 替换配置并启动:
    备份原RPM版Nginx的配置,将你的自定义配置复制到新编译的Nginx配置目录,测试并启动即可。

关键说明

  • 为什么include没用?include只是用来加载额外的配置文件片段,比如include conf.d/*.conf;,它不能加载Nginx模块,模块必须通过编译时集成或动态加载才能被Nginx识别,进而支持对应的指令。
  • 优先选择方案一,因为OpenResty已经帮你做好了所有Lua模块的集成,完全避开了无外网下的依赖下载问题。

内容的提问来源于stack exchange,提问作者ScipioAfricanus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:08:25