nginx教程
火云邪神语录:天下武功,无坚不破,唯快不破!Nginx的看家本领就是速度,Lua的拿手好戏亦是速度,这两者的结合在速度上无疑有基因上的优势。
最先将Nginx,Lua组合到一起的是OpenResty,它有一个ngx_lua模块,将Lua嵌入到了Nginx里面;随后Tengine也包含了ngx_lua模块。至于二者的区别:OpenResty是Nginx的Bundle;而Tengine则是Nginx的Fork。值得一提的是,OpenResty和Tengine均是国人自己创建的项目,前者主要由春哥和晓哲开发,后者主要由淘宝打理。
至于OpenResty和Tengine孰优孰劣,留给大家自己判断,如下资料可供参考:
- ngx_openresty: an Nginx ecosystem glued by Lua
- 淘宝网Nginx应用、定制与开发实战
推荐看看春哥在Tech-Club上关于『由Lua粘合的Nginx生态环境』的演讲实录,有料!
安装
需要最新版的Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件。
安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJIT。
因为安装在缺省路径,所以LuaJIT对应的lib,include均在/usr/local目录里。
下面就可以编译Nginx了:
试着启动一下Nginx看看,如果你运气不好的话,可能会遇到如下错误:
cannot open shared object file: No such file or directory
这是神马情况?可以用ldd命令来看看:
此类问题通常使用ldconfig命令就能解决:
再试着启动Nginx看看,应该就OK了。
应用
我们先用一个简单的程序来暖暖场:把下面的代码加入到Nginx的配置文件nginx.conf,并重启Nginx,然后浏览,就能看到效果了。
在深入学习ngx_lua之前,建议大家仔细阅读一遍春哥写的Nginx教程。
这里我就说关键的:Nginx配置文件所使用的语言本质上是『声明性的』,而非『过程性的』。Nginx处理请求的时候,指令的执行并不是由定义指令时的物理顺序来决定的,而是取决于指令所属的阶段,Nginx常用的阶段按先后顺序有:rewrite阶段,access阶段,content阶段等等。演示代码中的set指令属于rewrite阶段,content_by_lua指令属于content阶段,如果试着把两条指令的顺序交换一下,会发现程序依然能够正常运行。
下面我们尝试结合Redis写个更实战一点的例子。
首先,我们需要创建一个Redis配置文件config.json,内容如下:
然后,我们创建一个解析配置文件的脚本init.lua,其中用到了Lua CJSON模块:
说明:代码里用到了共享内存,这样就不必每次请求都解析一遍配置文件了。
接着,我们创建一个渲染内容的脚本content.lua,用到了Resty Redis模块:
说明:建议把Resty Redis模块放到vendor目录下,稍后在Nginx中统一设置。
最后,我们需要在Nginx配置文件里设置一下:
说明:为了方便调试,我关闭了lua_code_cache,如果是生产环境,应该开启它。
另外,安装CJSON的时候,需要注意Makefile文件里头文件的路径,缺省是:
如果安装的是LuaJIT的话,最好把头文件拷贝到相应目录:
…
我最近参与的一个项目,提供了一些用于Web轮询的接口,都是用Nginx+Lua实现的,虽然总共只有十几台服务器,但是每天可以提供几十亿次的请求量,贼拉拉的强。
最后,让我引用某位屌丝的语录做结束语吧:Lua,未婚男性程序员的最爱。
此条目由老王发表在Technical分类目录,并贴了Lua、Nginx标签。将固定链接加入收藏夹。《NGINX与LUA》上有29条评论
以上就介绍了nginx教程,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
推荐阅读
-
钉钉怎么填写表单? 钉钉表单填写提交的教程
-
HtoA怎么激活?Solid Angle Houdini To Arnold v3.0.1 for Houdini 激活图文教程
-
剪映app素材怎么旋转? 剪映画面旋转的教程
-
2020春运怎么抢票 2020春运火车票抢票详细教程
-
利用播放器PotPlayer进行教程视频录制
-
迅雷影音片库怎么删不掉?彻底删除迅雷影音片库教程
-
小米电视怎么卸载软件?小米电视卸载应用教程
-
迅雷影音如何看片?迅雷看看播放器看片教程
-
myeclipse10.0怎么激活? myeclipse10.0及以上版本的激活教程
-
Solidworks怎么在装配体中打孔? sw装配体中打孔的教程