OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

介绍两个学习nginx+lua的教程:
agentzh 的 Nginx 教程
OpenResty 最佳实践

官方建议直接安装openresty,而对于已经安装nginx的用户,这里总结一下如何基于nginx基础之上增加lua模块。

  • luajit
  • 下载luajit:
    http://luajit.org/download.html

    root@localhost [~] wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
    root@localhost [~] tar -zxvf LuaJIT-2.0.5.tar.gz
    root@localhost [~] cd LuaJIT-2.0.5
    root@localhost [~] make
    root@localhost [~] make install
    ==== Successfully installed LuaJIT 2.0.5 to /usr/local ====

    [root@iZ28w0fjfxvZ LuaJIT-2.0.5]# lua -v
    Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
  • NDK 和 lua-nginx-module
  • 下载NDK,NDK是一个Nginx模块,旨在扩展优秀Nginx网络服务器的核心功能,可以作为其他Nginx模块的基础。

    它具有处理不原始的通用任务的功能和宏,具有通用代码作为核心分发的一部分。 NDK本身添加了从用户的角度来看的几个功能 - 它只是旨在帮助减少Nginx模块开发人员需要编写的代码

    希望使用NDK中的任何功能的Nginx模块开发人员应该指定NDK是它们的模块的依赖,并且那些用户在编译自己的模块时也需要编译它。 他们还需要在自己的模块中声明他们希望使用的NDK的哪些功能(如下所述)。

    地址:
    https://github.com/simpl/ngx_devel_kit/tags
    https://github.com/openresty/lua-nginx-module/releases

    将文件放到src目录,确保安装nginx时,可以找到。

    root@localhost [~] wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
    root@localhost [~] tar -zxvf v0.3.0.tar.gz
    root@localhost [~] wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc8.tar.gz
    root@localhost [~] tar -zxvf v0.10.9rc8.tar.gz
    root@localhost [~] cp ngx_devel_kit-0.3.0 /usr/local/src/ngx_devel_kit-0.3.0 -R
    root@localhost [~] cp lua-nginx-module-0.10.9rc8 /usr/local/src/lua-nginx-module-0.10.9rc8 -R
  • 安装nginx + lua
  • 设置变量指向,不同操作系统可能目录有所差异,确认目录是否正确。

    root@localhost [~] export LUAJIT_LIB=/usr/local/lib
    export LUAJIT_INC=/usr/local/include/luajit-2.0/

    备份nginx conf目录。

    进入nginx安装目录:

    root@localhost [~] ./configure --user=nobody --group=nobody \
    --prefix=/opt/app/nginx \
    --sbin-path=/opt/app/nginx/sbin/nginx \
    --conf-path=/opt/app/nginx/conf/nginx.conf \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_flv_module \
    --with-http_gzip_static_module \
    --with-pcre \
    --lock-path=/var/run/nginx.lock \
    --pid-path=/var/run/nginx.pid \
    --add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
    --add-module=/usr/local/src/lua-nginx-module-0.10.9rc8

    root@localhost [~] make
    root@localhost [~] make install
  • 测试代码
  • 在nginx.conf中新增如下代码,并重启nginx服务,进行测试。

    server {
        listen 8080;
        location /lua {
                set $test "hello, world.";
                content_by_lua '
                ngx.header.content_type = "text/plain";
                ngx.say(ngx.var.test);
            '
    ;
        }
    }
  • 错误和异常
  • 安装后执行./sbin/nginx -t确认是否成功。

    如果出现错误:
    error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

    解决方案:
    ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2