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!字眼
其它
这里推荐几个组件
// 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参数由全局变量改为了局部变量,如果在以前的代码中使用过,需要重新进行声明,否则该参数会报错。
[...]背景前阵子遇上了类似ddos的攻击, 为了防止某恶意用户多次对服务器端口进行攻击,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。实现 IP 黑名单的功能有很多途径:在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;在应用层面,在请求服务[...]