日期:2014-05-16  浏览次数:20567 次

ngx_lua_module-1.0.5.1 (LUA编写网页脚本,支持windows和linux)

?

注:最新版本在以下博客首发:

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