最近公司同事和以及几个朋友问我,nginx+lua也能整合使用这种是一种什么样子技术和架构。对这个话题感觉自己五年前就听说这个使用方式,而且是非常完美和性能也是非常不错。对那些不会C语言写模块的开发者来说是一个福音。以及也用C写过一个图片实时切分大小模块,主要对于C语言掌握不是太好,写的时候还是找了一本书复习一下以前在大学中学习这门语言。所以就是研究一下这个nginx+lua这个组合,相关概念和如何安装我就是不介绍在网上一搜一大把,主要说明一下这种组合方式架构和相关主要市面上几种编译技术细节:
1.lua这个语言编译器嵌入到nginx中,这个实现方式是通过nginx-lua模块来实现的。这个源代码有兴趣自己可以看看。原理还是比较简单nginx标准模块,这个模块功能就是让你写的lua可以直接可以运行这种。就好比我们的JAVA虚机这种模式。相关nginx-lua模块相关语法和使用大家可以参考这个模块github源代码里面介绍相关内容这里不做具体说明。我拿出几个我们平时比较常用语句:
1) content_by_lua 意思就是在我们nginx conf中可以直接写相关lua语句,如何相关简单判定,输出,对nginx常量和相关nginx变量进行对操作,这个功能对于一些朋友使用简单功能会比较常用
2) access_by_lua和rewrite_by_lua 意思就是跟上面这个会一起使用,具体功能有就是在执行上面这个语句时进行先处理,后面这个语句就是在 nginx rewrite重写URL时进行使用。相关具体操作这里先不做具体介绍
3)content_by_lua_file,access_by_lua_file,rewrite_by_lua_file 意思就是在不同场景中引入相关在lua文件,当然这个文件路径这个要提示一下,可以相对也可以绝对。相对方式跟nginx你编译主目录对根目录如/conf/xxx.lua,nginx加载就会直接到你的conf目录下面查找这个lua文件。
感觉基本上掌握这几个语句应该就可以使用这个nginx_lua,如要想更加复杂应用的话可以参考nginx-lua模块文档有其他说明一些语句用法。这里时间关系暂进不做介绍,如果需要可以在留言中向我咨询。
2.nginx+lua如何开发和线上部署说明:
1) 在开发中对于初学者这里推荐使用openresty,当然这个也可以部署到线上。先介绍一下openresty,这个开源作者是网名叫agentzh发起了对于这个开源软件维护五年以上了,听说也是说nginx_lua发起者。现在稳定版本是已经到了1.13.6.2 ,感觉大家可以放心使用。而且编译的方式跟nginx差不多,而且也把luajit也虚拟机也容入进行来了。相关编译方式只要把指明prefix这个根目录在哪里就可以,其它开源工作者已经给大家配置好,先编译luajit,然后编译nginx并且把相关常用nginx_lua相关模块都给大家默认配置好了。应该来说一个傻瓜式编译。
2) 还有一些同学或说我现在使用tengine,nginx那应该如何把它编译进来呢。关于这个来说就是也要自己来自定义方式来编译或是对于现有已经在使用nginx和tengine进行重新编译。因为使用是没有默认方式给你编译。需要就是自己手工来配置。tengine编译方式:
先下载tengine,然后进行手工加入参数进行编译,在编译之前有一个比较重查就是先编译luajit,我这里使用是luajit-v2.0.5,具体对于这个编译步骤不做介绍因为是比较简单。重点是介绍我这边对tengine+lua编译。这里有一个细节方面就是nginx_lua模块版本。tengine中带了一个版本是0.9.6。在我们线上部署因为使用一些高级语法以及一些第三方lua中模块需要一些新的语句,所以我们把它给升级了一下。这里如果你们只是基本使用的话可以不使用升级,升级的方法就是tengine中目录下modules/ngx_http_lua_module把老移出来,放进最新nginx_lua就是可以了,目录还是使用这个ngx_http_lua_module这个目录,相关一个完整编译参数如下:
./configure --prefix=/usr/local/nginx --http-client-body-temp-path=/usr/local/nginx/temp/client-body-temp --http-proxy-temp-path=/usr/local/nginx/temp/proxy-temp --http-fastcgi-temp-path=/usr/local/nginx/temp/fastcgi-temp --http-uwsgi-temp-path=/usr/local/nginx/temp/uwsgi-temp --http-scgi-temp-path=/usr/local/nginx/temp/scgi-temp --with-http_ssl_module --with-http_concat_module --with-http_stub_status_module --with-http_realip_module --with-http_random_index_module --with-http_dav_module --with-http_sysguard_module --with-http_sub_module --with-http_geoip_module --with-http_lua_module --with-luajit-inc=/usr/local/include/luajit-2.0 --with-luajit-lib=/usr/local/lib --with-lua-inc=/usr/local/include --with-lua-lib=/usr/local/lib
具体目录可以根据大家自己实际部署而定。
至于官方nginx的话,我这边也进行使用过了。所以暂时也不做相关介绍。大至上是没有太多区别的。不过这里我要说明一下,nginx官方的今年最新版本好像对于nginx_lua支持不太好,所以最好挑选是去年发布版本进行跟nginx-lua进行编译。相关如何你使用nginx官方如果有在编译和部署中碰到问题可以直接跟我联系QQ:610794426,也可以进行留言谢谢。
文章评论