OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关
比如说,流量分发,什么意思呢?在一些大型的电商系统架构中,对于有些访问特别频繁的接口,我们常常会通过多级缓存区实现,从而提高系统抗住并发的能力,也就是系统的高可用能力,在经典的三级架构中,即nginx+堆缓存+redis缓存中,第一级缓存的是nginx,比如像一些请求访问非常频繁的商品详情页面,常见的做法是可以通过页面静态化模板技术将html页面通过nginx去访问,
但中间有一个问题需要解决的是,如果页面内容发生了变化,就需要通过程序重新生成html模板页面,对于小型电商网站页面不多的情况下可以这样搞,但是对于像淘宝那样的上万甚至上亿的页面来说,这样并不是一个很好的做法,因此另一个比较流行的做法是通过页面模板技术去处理数据的问题,说的通俗点就是,html模板页面提前生成好了,需要做的就是去请求数据,数据来了直接往html模板页面填充即可,既然是请求接口数据,那么这个数据的来源就可以通过缓存了,这时候三级缓存的作用就出来了,而OpenResty就是一个整合nginx完成接口请求逻辑的很好的组件,具体的运用会在下面一一来说,
下面来说一下OpenResty搭建的基本步骤,基本环境centos6.5,用到的其他依赖包如下,我是提前下载好了,也可以在安装过程中通过命令下载,
1、mkdir -p /usr/servers ,在usr目录下创建一个servers的文件夹,
2、安装pcre-devel,这个是后面安装相关模块依赖的组件,否则后面会报错,执行下面的命令即可
yum install -y readline-devel pcre-devel openssl-devel gcc
3、下载 ngx_openresty-1.7.7.2.tar.gz ,可以通过命令,也可以提前下载好上传即可,
或者通过命令,然后依次执行下面的命令即可,
wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz
tar -xzvf ngx_openresty-1.7.7.2.tar.gz
cd /usr/servers/ngx_openresty-1.7.7.2/
4、进入到bundle目录,cd bundle/LuaJIT-2.1-20150120/ ,然后依次执行下面两个命令进行安装,
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit
5、接着需要安装 ngx_cache_purge,nginx_upstream_check_module,这两个模块是作为nginx配合使用的模块,通过命令下载到这个位置,然后解压即可,依次执行下面命令即可,
cd bundle
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
tar -xvf 2.3.tar.gz
cd bundle
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
tar -xvf v0.3.0.tar.gz
6、前面的准备步骤和依赖的组件添加完毕,下面就可以开始安装OpenResty了,通过下面的命令执行,
cd /usr/servers/ngx_openresty-1.7.7.2
./configure --prefix=/usr/servers --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;;”;
使用下面的命令检查一下我们的配置是否有语法问题,这是个很好用的命令可以帮助我们检查nginx的配置的语法问题,然后我们重新加载一下nginx,即 ./nginx -s reload 即可,
这时候我们再去浏览器访问一下,可以看到,已经走了我们的lua.conf中的配置,
本篇到这里基本就结束了,后面会对OpenResty的具体使用做进一步的说明,最后感谢观看!