将LUA模块添加到nginx

时间:2018-05-15 19:19:53

标签: nginx lua

我在redhat 7.5服务器上安装了nginx 1.12,它也有LUA 5.1.4 我下载了lua-nginx-module-0.10.13 tar ball并将其放在/ etc / nginx / modules下,但我无法使用LUA auth文件运行nginx。

我在/ opt / openresty / ..

下也有开放态度

http://openresty.org/en/installation.html 我跟着" make"这里的方法。

不幸的是,这台服务器无法访问互联网,所以我无法从git安装东西,这大大减慢了这一点。我不知道如何在这里添加模块。任何评论都会有所帮助。

这是我的nginx配置的样子..

server
{
    listen 80;

    access_log  /opt/elk/logs/nginx/access.log  main;

    #auth_basic "admin";
    #auth_basic_user_file "/etc/nginx/passwd";

    client_max_body_size 100M;

    location /
    {
        proxy_pass http://127.0.0.1:9200;

        keepalive_timeout 300s;

        #auth_basic on;
        auth_basic "admin";
        auth_basic_user_file "/etc/nginx/passwd";

        access_by_lua_file '/etc/nginx/authorized.lua';
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html
    {
        root   /usr/share/nginx/html;
    }
}

lua_access_file导致错误

nginx:[emerg] unknown directive" access_by_lua_file"是否有一些"包括"我需要在配置中定义以摆脱这个?

感谢。

3 个答案:

答案 0 :(得分:5)

根据问题和我的理解,我将您的问题分解为小任务。

1)该错误明确表明您没有正确安装Lua-nginx-module。

Lua-nginx-module documentation

2)服务器无法访问Internet,因此无法从git下载。     *

3)使用lua-nginx-module安装nginx的步骤。

  • lua nginx模块兼容性检查。

    Nginx Compatibility
        The latest version of this module is compatible with the following versions of Nginx:
    
        1.13.x (last tested: 1.13.6)
        1.12.x
        1.11.x (last tested: 1.11.2)
        1.10.x
        1.9.x (last tested: 1.9.15)
        1.8.x
        1.7.x (last tested: 1.7.10)
        1.6.x
    
        Nginx cores older than 1.6.0 (exclusive) are not supported.
    

    referance document for nginx compatibility

  • 先决条件

    -Centos / RHEL [如果您的服务器上存在Internet连接]。

    yum install -y wget unzip gcc make openssl-devel pcre-devel zlib-devel 
    

    -手动下载.rpm软件包并进行安装。

    1. 从RPM资源站点搜索先决条件

    2. 将文件复制到Linux框中

      • 请参考以上第(2)点,“ 服务器无法访问Internet,因此无法从git下载”。
    3. 使用以下命令进行安装。

        rpm -i rpm-package-name
      

      Install-rpm-file-on-linux

    -安装必备的Tarball。

  • 下载源文件

    $ cd /tmp/nginx-build
    
    $ wget http://nginx.org/download/nginx-1.13.0.tar.gz
    
    $ wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
    
    $ wget -O nginx_devel_kit.tar.gz https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
    
    $ wget -O nginx_lua_module.tar.gz https://github.com/openresty/lua-nginx-module/archive/v0.10.8.tar.gz
    
  • 提取

     $ tar xvf LuaJIT-2.0.4.tar.gz
    
     $ tar xvf nginx-1.11.10.tar.gz
    
     $ tar xvf nginx_devel_kit.tar.gz
    
     $ tar xvf nginx_lua_module.tar.gz
    
  • 构建LuaJIT

    要使用LuaJIT构建Nginx,我们需要首先构建LuaJIT。这就像make命令一样简单

       $ cd /tmp/nginx-build/LuaJIT-2.0.4
       $ make install
        ==== Building LuaJIT 2.0.4 ====
        make -C src
        make[1]: Entering directory `/tmp/nginx/LuaJIT-2.0.4/src'
        ...
        ...
        ln -sf luajit-2.0.4 /usr/local/bin/luajit
        ==== Successfully installed LuaJIT 2.0.4 to /usr/local ====
    
  • 正在构建Nginx

        $ cd /tmp/nginx-build/nginx-1.11.10
        $ LUAJIT_LIB=/usr/local/lib LUAJIT_INC=/usr/local/include/luajit-2.0 \
        ./configure \
        --user=nobody                          \
        --group=nobody                         \
        --prefix=/etc/nginx                   \
        --sbin-path=/usr/sbin/nginx           \
        --conf-path=/etc/nginx/nginx.conf     \
        --pid-path=/var/run/nginx.pid         \
        --lock-path=/var/run/nginx.lock       \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --with-http_gzip_static_module        \
        --with-http_stub_status_module        \
        --with-http_ssl_module                \
        --with-pcre                           \
        --with-file-aio                       \
        --with-http_realip_module             \
        --without-http_scgi_module            \
        --without-http_uwsgi_module           \
        --without-http_fastcgi_module ${NGINX_DEBUG:+--debug} \
        --with-cc-opt=-O2 --with-ld-opt='-Wl,-rpath,/usr/local/lib' \
        --add-module=/tmp/nginx/ngx_devel_kit-0.3.0 \
        --add-module=/tmp/nginx/lua-nginx-module-0.10.8
        $ make install
    
  • Syntanx Check

     $ nginx -t
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  • Nginx Lua测试

    *根据您的nginx文件。

     location /
    {
    proxy_pass http://127.0.0.1:9200;
    
    keepalive_timeout 300s;
    
    #auth_basic on;
    auth_basic "admin";
    auth_basic_user_file "/etc/nginx/passwd";
    
    access_by_lua_file '/etc/nginx/authorized.lua'; }
    
  • 重新加载/重新启动Nginx

        systemctl nginx restart
        systemctl nginx reload.
    

    how-to-reload-nginx-systemctl-or-nginx-s

答案 1 :(得分:2)

如果您使用 docker 运行 nginx,您只需关注 instructions github 存储库上的 docker-nginx

在您的 nginx-conf 中确保还通过添加来加载模块

load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;
load_module modules/ngx_stream_lua_module.so;

答案 2 :(得分:1)

Akshay Barahate的回答是漫长而全面的。 但是要回答你的问题

是否需要在配置中定义一些“包含”来消除此问题?

尝试添加

load_module "ngx_http_lua_module.so"

软件包名称可能有所不同,以上文件名来自软件包的ubuntu 18.04安装。 (通常,您可以在/ usr / share / nginx / modules中找到您的模块)

注意:如果从源代码编译nginx(这似乎是使lua运行的推荐方法),则路径和文件名可能会有所不同。

快乐鳕鱼。