日期:2014-05-16 浏览次数:20607 次
?
注:最新版本在以下博客首发:
http://blog.csdn.net/ngwsx/
?
ngx_lua_module是一个nginx http模块,它把lua解析器内嵌到nginx,用来解析并执行lua语言编写的网页后台脚本。
?
更新说明:
*) 更改LUA表的名称,具体如下:
??? nginx.dbd变成nginx.database;
??? nginx.log变成nginx.logger;
??? nginx.req变成nginx.request;
??? nginx.resp变成nginx.response;
??? nginx.var变成nginx.variable。
*) 重新实现nginx.database表,原有函数全部去掉,新增execute函数,
??? 简化了LUA代码中的数据库操作。具体请查看下面示例代码的用法。
*)? ngx_lua_module模块核心代码的优化。
?
特性:
*) HTML网页中内嵌LUA脚本代码,类似于PHP。
*) 支持非阻塞的数据库操作,目前只支持MYSQL。
?
API说明:
*) nginx 表
*) nginx.database 表
??? 提供数据库操作的接口,这些接口的内部实现是基于非阻塞模式的,
??? 因此不会阻塞Nginx的事件处理,可以支持比较高的并发。
??? 具体用法请查看下面的示例代码。
*) nginx.logger 表
??? Nginx日志接口的封装,允许在LUA代码写日志信息到Nginx的日志文件中。
??? 具体用法请查看下面的示例代码。
*) nginx.request 表
??? 提供与HTTP请求有关的接口,可以获取请求参数、请求头和Cookie值。
??? 具体用法请查看下面的示例代码。
*) nginx.response 表
??? 提供与HTTP响应有关的接口。
??? 具体用法请查看下面的示例代码。
*) ngnx.variable 表
??? 提供接口给LUA代码以获取Nginx的HTTP变量。
??? 具体用法请查看下面的示例代码。
?
TODO:
*) API说明文档。
*) 更多实用功能的LUA表和接口实现,
??? 例如多台机器之间会话(Session)共享的透明处理。
?
最新版本:
windows:https://github.com/downloads/hehaiqiang/ngwsx/ngx_lua_module-windows-1.0.5.1.rar
linux:https://github.com/downloads/hehaiqiang/ngwsx/ngx_lua_module-linux-1.0.5.1.tar.gz
历史版本:
https://github.com/hehaiqiang/ngwsx/downloads
?
?
示例代码:
?
index.lsp
<% local req = nginx.request --local name = req["name"] --local name = req.name if req.method == req.GET then name = req.get["name"] name = req.get.name else name = req.post["name"] name = req.post.name end name = name or "world" %> <html> <head><title>hello, <%=name%>!</title></head> <body> hello, <%=name%>! <hr> <form action="index.lsp" method="post"> <input type="text" name="name"/> <input type="submit" value="submit"/> </form> </body> </html>
?
test_database.lsp
<% local print = print local nginx = nginx local req = nginx.request local db = nginx.database local res = db.execute({ driver = "libdrizzle", host = "127.0.0.1", port = 3306, user = "root", password = "123456", database = "mysql", sql = "show databases" }) %> <html> <head> </head> <body> err: <%=res.err%> <br/> errstr: <%=res.errstr%> <br/> col_count: <%=res.col_count or ""%> <br/> row_count: <%=res.row_count or ""%> <br/> affected_rows: <%=res.affected_rows or ""%> <br/> insert_id: <%=res.insert_id or ""%> <br/> <% if res.err ~= 0 then print("error") return end %> <hr> <table border="1"> <tr> <% for i=1,#res.columns do %> <td><b><%=res.columns[i]%></b></td> <% end %> </tr> <% for r=1,#res.rows do %> <tr> <% for i=1,#res.rows[r] do %> <td><%=res.rows[r][i]%></td> <% end %> </tr> <% end %> </table> <hr> request_time: <%=req.request_time%>ms </body> </html>
?
test_logger.lsp
<% local pr