安装OpenResty(nginx+lua)开发环境并正常运行
一,OpenResty介绍
1)Nginx主要场景还是负载均衡、反向代理、代理缓存、限流、静态文件处理等场景,而把Nginx作为一个Web动态容器使用的还不是那么广泛。借助于Nginx的事件驱动模型和非阻塞IO,章亦春(agentzh)将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为了OpenResty,以此使得Nginx可以作为一个Web Server使用,可以实现高性能的Web应用程序。
2)官方介绍,OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
3)Lua提供了协程并发,即以同步调用的方式进行异步执行,从而实现并发,比起node.js等回调机制的并发来说代码更容易编写和理解,排查问题也会容易。
4)ngx_lua提供了与Nginx交互的很多的API,对于开发人员来说只需要学习这些API就可以进行功能开发,而对于开发web应用来说,如果接触过Servlet的话,其开发和Servlet类似,无外乎就是知道接收请求、参数解析、功能处理、返回响应这几步的API是什么样子的。提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。
5)与php开发相比,Nginx+php-fpm之间是要有进程之间通信的,这样以来基础的性能开销就很大。而lua是嵌在Nginx进程内部的。
6)当然,OpenResty的周边模块还不完善,不健全。如果要做一个比较复杂的web访问站,目前来说还是php或者其他比较成熟的语言来做更为合适。OpenResty适合逻辑简单但对并发性能要求比较高的项目。此外,从近期用下来的体验来看,OpenResty跟php相比调试没那么方便,不像php可以使用xdebug或者其他调试工具,可以单步调试,在线调试。
二,安装OpenResty
1)依赖库安装
1 |
yum install readline-devel pcre-devel openssl-devel perl |
2)下载安装包http://openresty.org/cn/download.html
3)安装编译OpenResty
1 2 3 4 5 |
tar -xzvf openresty-VERSION.tar.gz cd openresty-VERSION/ ./configure make sudo make install |
4)启动nginx
1 2 3 4 5 6 7 |
[vagrant@bogon /]$ sudo usr/local/openresty/nginx/sbin/nginx [vagrant@bogon /]$ ps -ef | grep "nginx" root 11046 1 0 07:26 ? 00:00:00 nginx: master process usr/local/openresty/nginx/sbin/nginx nobody 11047 11046 0 07:26 ? 00:00:00 nginx: worker process vagrant 11049 2865 0 07:26 pts/0 00:00:00 grep nginx [vagrant@bogon /]$ usr/local/openresty/nginx/sbin/nginx -v nginx version: openresty/1.9.15.1 |
5)创建工作目录并编写helloword
1 2 3 4 5 6 |
[root@bogon work_openresty]# cd /usr/local/work_openresty/ --创建工作目录 [root@bogon work_openresty]# ll 总用量 4 drwxr-xr-x. 1 root root 102 1月 20 08:41 lua -----自己的lua代码 -rw-r--r--. 1 root root 227 1月 20 08:45 lua.conf ----nginx配置文件 drwxr-xr-x. 1 root root 68 1月 20 08:41 lualib ---lua依赖库/第三方依赖(*.lua和*.so) |
6)nginx配置文件中添加lua.conf
1 |
include /usr/local/work_openresty/lua.conf; |
7)配置lua.conf
1 2 3 4 5 6 7 8 9 10 11 |
[root@bogon work_openresty]# cat lua.conf server { listen 3302; server_name _; location /lua { default_type 'text/html'; lua_code_cache off; #开发阶段可以关闭缓存,不需要重启nginx content_by_lua_file /usr/local/work_openresty/lua/test.lua; } } |
8)编写lua代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ngx.say("HelloWorld!") local arg = ngx.req.get_uri_args() for k,v in pairs(arg) do ngx.say("[GET ] key:", k, " v:", v) end ngx.req.read_body() -- 解析 body 参数之前一定要先读取 body local arg = ngx.req.get_post_args() for k,v in pairs(arg) do ngx.say("[POST] key:", k, " v:", v) end local request_uri = ngx.var.request_uri ngx.say("request_uri : ", request_uri, "<br/>") --MD5 ngx.say("ngx.md5 : ", ngx.md5("123"), "<br/>") --http time ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "<br/>") |
9)访问接口
1 2 3 4 5 6 7 |
[root@bogon work_openresty]# curl 192.168.33.20:3302/lua?a=20 -d c=3 HelloWorld! [GET ] key:a v:20 [POST] key:c v:3 request_uri : /lua?a=20<br/> ngx.md5 : 202cb962ac59075b964b07152d234b70<br/> ngx.http_time : Fri, 20 Jan 2017 08:51:12 GMT<br/> |
参考链接:
使用Nginx+Lua(OpenResty)开发高性能Web应用
上一篇: php5.5/php7/swoole/openresty 压测性能对比 下一篇: PHP中phar(PHP Archive)包的创建并使用
发表评论