Ubuntu 下 Nginx+Lua 环境搭建

nginx搭配lua可以实现非常多场景, 诸如限流控制, 动态IP封禁, 分流等, 在高并发和复杂业务场景下, nginx+lua 小巧且高效的特性为不同的业务场景带来了更高更稳定的性能

下面为大家介绍基于ubuntu系统的apt-get进行操作,免去了诸如ng-lua组件手动加载等繁琐的步骤

可以直接安装OpenResty 来获得nginx+lua, 但是由于本系统之前已经单独安装好了nginx, 所以本次介绍的是为已经安装好的nginx加上lua模块

更新apt-get源

apt-get update

安装nginx

sudo apt-get install nginx

安装lua及相关组件

apt-get install lua5.2 lua5.2-doc liblua5.2-dev

安装luajit

sudo apt-get install luajit

关于JIT :

通常,程序有两种运行方式:静态编译与动态直译。

静态编译的程序在执行前全部被翻译为机器码,而动态直译执行的则是一句一句边运行边翻译。

即时编译(Just-In-Time Compiler)则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。

此外,使用luajit可以大大提高lua的运行效率,由此也被官方钦定。

安装nginx的lua模块 lua-nginx-module

sudo apt-get install libnginx-mod-http-lua

配置nginx

nginx的配置中,核心在于content_by_lua_file

server {
            listen 80;
            server_name ebid.xxxx.com;
            root /home/separes/xxx;

            location / {
                lua_code_cache off;  // 缓存
                content_by_lua_file /home/separes/xxx/index.o;
            }
            location /lua {
                default_type 'text/html';
             content_by_lua 'ngx.say("hello, lua!")';
            }
}

需要注意的是:这里的nginx缓存是默认开启的,推荐调试及开发环境中手动关闭 lua_code_cache。
配置好后直接访问ip/lua, 可以看到hello, lua!字眼

hello, lua!.png

其它

这里推荐几个组件
// cjson
sudo apt-get install lua-cjson

// lyaml
sudo luarocks install lyaml

// dbi
sudo luarocks install luadbi-mysql MYSQL_INCDIR=/usr/include/mysql
//实测后面必须指定MYSQL路径,指向系统中的mysql根目录,匹配mysql.c文件

需要注意的是,使用 luarocks/apt-get 安装或升级 lua-DBI 的时候,需要注意新版本的DBI并不完全向下兼容,其中dbi参数由全局变量改为了局部变量,如果在以前的代码中使用过,需要重新进行声明,否则该参数会报错。

仅有 1 条评论
  1. [...]背景前阵子遇上了类似ddos的攻击, 为了防止某恶意用户多次对服务器端口进行攻击,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。实现 IP 黑名单的功能有很多途径:在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;在应用层面,在请求服务[...]

添加新评论