Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为 了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编 写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这 是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进 行的JIT项目,提供在特定平台上的即时编译功能。
简单来说:
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目 的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
lua 语言具有以下特性 :
支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希 表,集合,对象;
语言内置模式匹配;闭包(closure); 函数也可以看做一个值;提供多线程(协同进 程,并非操作系统所支持的线程)支持;
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据 抽象,虚函数,继承和重载等。
Lua的应用场景:
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
安全系统,如入侵检测系统
redis中嵌套调用实现类似事务的功能
web容器中应用处理一些过滤 缓存等等的逻辑,例如nginx。
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出 足以胜任 10K 乃至1000K以上并发连接响应的超高性能 Web 应用系统。
360,UPYUN,阿里云,新浪,腾讯网,去哪儿网,酷狗音乐等都是 OpenResty 的深度 用户。
OpenResty 简单理解,就相当于封装了nginx,并且集成了LUA脚本,开发人员只需要简 单的其提供了模块就可以实现相关的逻辑,而不再像之前,还需要在nginx中自己编写 lua的脚本,再进行调用了。
下面来说一下OpenResty搭建的基本步骤,基本环境centos6.5(无网络链接),用到的其他依赖包如下,我是提前下载好了,也可以在安装过程中通过命令下载。
通过命令下载安装:
OpenResty各个版本下载地址:http://openresty.org/cn/download.html
组件包下载地址(网上也能搜得到):
https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
执行如下代码:执行后等待安装完成即可。
注意:如果你的电脑或者服务器不能联网,则需要配置本地yum源,如果不会请参考:添加链接描述
yum install -y readline-devel pcre-devel openssl-devel gcc
mkdir -p /usr/openresty
tar -xzvf ngx_openresty-1.15.8.3.tar.gz
cd /usr/openresty/openresty-1.15.8.3/
进入到bundle目录,cd bundle/LuaJIT-2.1-20190507/ ,然后依次执行下面两个命令进行安装:
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit
安装 ngx_cache_purge,nginx_upstream_check_module,这两个模块是作为nginx配合使用的模块,通过命令下载或者上传到/usr/openresty/bundle,然后解压即可,依次执行下面命令即可
cd bundle #进入bundle目录下面,然后上传下载好的两个压缩包
#解压即可
tar -xvf ngx_cache_purge-2.3.tar.gz
tar -xvf nginx_upstream_check_module-0.3.0.tar.gz
一次执行如下命令即可:
cd /usr/openresty/openresty-1.15.8.3/ #进入安装目录
#执行安装命令 注意:组件路径根据实际情况指定
./configure --prefix=/usr/openresty --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2
make && make install #编译和编译安装
通过这三步,OpenResty就安装完毕了,看到如下界面,这两步需要耐心等待一会儿比较费时间
安装完毕后,我们可以进入到servers的主目录看看,可以发现多出了很多模块,因为OpenResty安装是和nginx紧密结合在一起的,因此自带nginx,然后我们进入到nginx的目录下,启动一下nginx看看是否好使。
可以看到nginx是可以正常使用的,但这并不是我们要的效果啊,使用过nginx的同学都知道,nginx可以作为反向代理服务器拦截特定的请求,做负载均衡转发等,但对于特定接口的类似于http之类的接口的精细化配置,其实直接使用nginx配置,其实还是挺麻烦的,事实上那也不是推荐的做法,而OpenResty真是因为自身整合了许多其他的组件,比如像http,redis,cache等,而且无缝整合nginx,自带的lua脚本可以满足大多数场景的需求,使得在上述的这一需求场景中变得很有意义,下面我们做一下简单的配置,通过配置OpenResty来实现访问特定的路径,其实说白了就是基于nginx做的进一步拦截处理,也就是 nginx+lua 的开发,
首先我们在nginx的conf的配置目录下新建一个lua.conf,
内容如下,是不是发现这个和nginx里面的配置很相似,只是在这里面使用了lua的脚本语法,待会儿再次访问的时候就可以展示出来:
然后在nginx.conf中添加进去OpenResty的相关依赖包和我们上面新增的这个lua.conf
在http部分添加:
lua_package_path “/usr/servers/lualib/?.lua;;”;
lua_package_cpath “/usr/servers/lualib/?.so;;”;
include lua.conf;
使用下面的命令检查一下我们的配置是否有语法问题,这是个很好用的命令可以帮助我们检查nginx的配置的语法问题,然后我们重新加载一下nginx,即 ./nginx -s reload 即可:
玩家撒花!!!!!!!!!!!