随笔分类 - LUA
摘要:最近很多人问我nginx lua的优势是什么?为什么?一、同步和异步、阻塞和非阻塞如果要说清楚这个问题首先要了解:同步和异步、阻塞和非阻塞的关系同步:php、java的正常代码都是同步执行的异步:javascript的回调函数就是异步的说白了自己写的程序里面如果没有回调函数都是同步的,常见的php、...
阅读全文
摘要:好久不用ngx_lua了,忽然被问到如何实现页面跳转,半天没反应过来,查了半天资料搞出来的,在这里做一个备份。需求说明:***.taobao.com 跳转到 www.taobao.com/?url=***程序如下: location = /test { content_by_lua ' --ngx.print(ngx.var.http_host) str = ngx.var.http_host local pos = string.find(str,".taobao.c...
阅读全文
摘要:为了以后方便,记录一下步骤1、yum install readline-devel2、wget http://www.lua.org/ftp/lua-5.1.4.tar.gz3、cd lua-5.1.44、make linux5、make install
阅读全文
摘要:现在我已经将翻译的内容放到:http://wiki.nginx.org/HttpLuaModuleZhNginx API for LuaIntroduction各种各样的*_by_lua和*_by_lua_file配置文件服务在都在nginx.conf文件内。这些LUA API只能运行在这些配置文件里面。这个API有两个标准的包NGX和NDK。这个包在ngx_lua内默认的包。这个软件包可以这样的引入外部的文件 local say = ngx.say module(...) function foo(a) say(a) end强烈不推荐使用pack...
阅读全文
摘要:access_by_luaaccess阶段。事例:location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; deny all; access_by_lua ' local res = ngx.location.capture("/mysql", { ... }) ... '; # proxy_pass/fastcgi_pass/... }也...
阅读全文
摘要:最近经常使用春哥和小哲老师写的NGINX-LUA,非常苦于没有中文文档,特别是向我这种英文水平实在有限的同学,所以将遇到的模块记录下来,供以后参考!原文:http://wiki.nginx.org/HttpLuaModulelua_code_cache一般放在nginx.conf里面,设置lua程序是否缓存,默认是开启的,开发模式开启即可:lua_code_cache off。开启后,重启nginx会有提示:nginx: [warn] lua_code_cache is off; this will hurt performance in /home/wb-liqiu/git/dante/co
阅读全文
摘要:Nginx 变量的创建只能发生在 Nginx 配置加载的时候,或者说 Nginx 启动的时候;而赋值操作则只会发生在请求实际处理的时候。事例:1 server {2 listen 8080;3 location /bar {4 echo "foo = [$foo]";5 set $foo 32;6 }7 }[root@sysadmin nginx]# curl 127.0.0.1:8080/bar -->foo = [32]
阅读全文
摘要:Lua解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在Lua中操纵字符串的功能基本来自于string库。字符串库中的一些函数是非常简单的:string.len(s) 返回字符串s的长度;string.rep(s, n)返回重复n次字符串s的串;你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要);string.lower(s) 将s中的大写字母转换成小写(string.upper将小写转换成大写)。如果你想不关心大小写对一个数组进行排序的话,你可以这样
阅读全文
摘要:获得前一天的日期的函数 1 function day_step(old_day,step) 2 local y,m,d 3 if("0" ~= string.sub(old_day,6,6)) then 4 m=string.sub(old_day,6,7) 5 else 6 m=string.sub(old_day,7,7) 7 end 8 9 if("0" ~= string.sub(old_day,9,9)) then10 d=string.sub(old_day,9,10)11 else12 d=s...
阅读全文
摘要:time和date两个函数在Lua中实现所有的时钟查询功能。函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间的秒数。)当为函数调用附加一个特殊的时间表时,该函数就是返回距该表描述的时间的数值。这样的时间表有如下的区间:yeara full yearmonth01-12day01-31hour01-31min00-59sec00-59isdsta boolean,trueif daylight saving 前三项是必需的,如果未定义后几项,默认时间为正午(12:00:00)。如果是在里约热内卢(格林威治向西三个时区)的一台Unix计算机上(相对时间为...
阅读全文
摘要:一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明.table.concat(table, sep, start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数.
阅读全文
摘要:构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}Lua将"Sunday"初始化days[1](第一个元素索引为1),用"Monday"初始化days[2]...print(d
阅读全文
摘要:string和其他对象一样,Lua自动进行内存分配和释放,一个string可以只包含一个字母也可以包含一本书,Lua可以高效的处理长字符串,1M的string在Lua中是很常见的。可以使用单引号或者双引号表示字符串。1 a = "a line"2 b = 'another line'为了风格统一,最好使用一种,除非两种引号嵌套情况。对于字符串中含有引号的情况还可以使用转义符\来表示。Lua中的转义序列有: 1 \a bell 2 \b back space -- 后退 3 \f form feed -- 换页 4 \n newline -- 换行 5 \r
阅读全文
摘要:开发的作者是:Yichun "agentzh" Zhang (章亦春)agentzh@gmail.com文件在:https://github.com/agentzh/lua-resty-upload----------------------------------------------------------------------------------------废话少说,具体步骤如下:1、上传upload.lua到指定的目录,我的是_services/upload/conf2、配置上传的SERVER(域名自己配制)location = /upload { clie
阅读全文
摘要:已经更新到官方文档:http://wiki.nginx.org/HttpLuaModule#ngx.location.capture语法:res = ngx.location.capture(uri, options?)环境: rewrite_by_lua*, access_by_lua*, content_by_lua*是一个同步非阻塞的NGINX子请求uriNGINX的子请求提供了一个非常强大的方式去实现非阻塞的内部请求,或者其他的C模块,比如ngx_proxy, ngx_fastcgi, ngx_memc, ngx_postgres, ngx_drizzle, 甚至ngx_lua自己等等
阅读全文
摘要:以前一直介绍NGINX 和 PHP安装,今天安装NGINX+LUA,开始感觉挺难的,其实很容易!~1、安装各种包# sudo apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl2、去下载春哥的openresty,下载地址:http://agentzh.org/misc/nginx/ngx_openresty-1.2.6.1.tar.gz3、安装./configure --prefix=/opt/openresty \ --with-luajit \ ...
阅读全文
摘要:当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do XXX end for i=1, table.maxn(tbtest) do XXX end 下面依次来讲讲四种遍历方式,首先来看for k,v in pairs(tbtest) do这种...
阅读全文
摘要:经常使用PHP开发的WEB开发人员,刚刚转到NGINX+DRIZZLE开发环境,开始估计会遇到LUA如何获取DRIZZLE+MYSQL返回数据的问题,下面给出我的一些经验。首先修改NGINX的配置文件location /mysql { set $name $1; set_quote_sql_str $quote_name $name; set $sql "SELECT * FROM crawl WHERE id=3"; drizzle_query $sql; drizzle_pass mysql; rds_json on; }curl localhost:8080/m...
阅读全文
摘要:NGINX-LUA 安装drizzle-0.8安装libdrizzle去页面:https://launchpad.net/libdrizzlewgethttps://launchpad.net/ubuntu/raring/+source/libdrizzle/0.8-1/+files/libdrizzle_0.8.orig.tar.gz./configuremakemake install安装oprestywget 'http://agentzh.org/misc/nginx/ngx_openresty-1.2.3.8.tar.gz'解压./configure --with-h
阅读全文