注:最新版本在以下博客首发:
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 print = print
local nginx = nginx
local log = nginx.logger
%>
<html>
<head>
</head>
<body>
<%
-- writing some messages into the log file of the nginx
log.error(log.ALERT, "test alert" .. 1 .. 10)
log.debug(log.DEBUG_HTTP, "test debug http")
log.error(log.ERR, "test error")
log.error(log.EMERG, 1000)
%>
please opening the log file of the nginx to view messages.
</body>
</html>
test_request.lsp
<%
local print = print
local nginx = nginx
local req = nginx.request
local get_req_members = function()
return {
uri = req.uri,
args = req.args,
host = req.host,
exten = req.exten,
method = req.method,
referer = req.referer,
user_agent = req.user_agent,
method_name = req.method_name,
request_time = req.request_time .. "ms",
request_line = req.request_line,
unparsed_uri = req.unparsed_uri,
http_protocol = req.http_protocol
}
end
function get_headers_members()
local headers = req.headers
return {
host = headers.host,
user_agent = headers.user_agent
}
end
%>
<html>
<head>
</head>
<body>
<table border="1">
<% for k,v in pairs(get_req_members()) do %>
<tr><td><%=k%></td><td><%=v%></td></tr>
<% end %>
</table>
<hr>
<table border="1">
<% for k,v in pairs(get_headers_members()) do %>
<tr><td><%=k%></td><td><%=v%></td></tr>
<% end %>
</table>
<%
-- TODO: test the table "req.cookies"
%>
<hr>
<%
local one = req["one"] or 1
local two = req.two or 2
local three = req.get["three"] or 3
local four = req.get.four or 4
%>
hello, <%=one%><%=two%><%=three%><%=four%>!
</body>
</html>
test_response.lsp
<%
local print = print
local nginx = nginx
local req = nginx.request
local resp = nginx.response
resp.content_type = "text/html"
%>
<html>
<head><title></title></head>
<body>
<%
local one = req["one"] or 1
local two = req.two or 2
local three = req.post["three"] or 3
local four = req.post.four or 4
%>
hello, <%=one%><%=two%><%=three%><%=four%>!
<hr>
<form action="test_response.lsp" method="post">
<input type="text" name="one"/>
<input type="text" name="two"/>
<input type="text" name="three"/>
<input type="text" name="four"/>
<input type="submit" value="submit"/>
</form>
<hr>
</body>
</html>
test_variable.lsp
<%
local print = print
local nginx = nginx
local var = nginx.variable
local array = {
--var.arg_PARAMETER or "",
args = var.args or "",
binary_remote_addr = var.binary_remote_addr or "",
body_bytes_sent = var.body_bytes_sent or "",
content_length = var.content_length or "",
content_type = var.content_type or "",
--var.cookie_COOKIE or "",
document_root = var.document_root or "",
document_uri = var.document_uri or "",
host = var.host or "",
hostname = var.hostname or "",
--var.http_HEADER or "",
user_agent = var.http_user_agent or "",
is_args = var.is_args or "",
limit_rate = var.limit_rate or "",
nginx_version = var.nginx_version or "",
query_string = var.query_string or "",
remote_addr = var.remote_addr or "",
remote_port = var.remote_port or "",
remote_user = var.remote_user or "",
request_filename = var.request_filename or "",
request_body = var.request_body or "",
request_body_file = var.request_body_file or "",
request_completion = var.request_completion or "",
request_method = var.request_method or "",
request_uri = var.request_uri or "",
scheme = var.scheme or "",
server_addr = var.server_addr or "",
server_name = var.server_name or "",
server_port = var.server_port or "",
server_protocol = var.server_protocol or "",
uri = var.uri or ""
}
%>
<html>
<head>
</head>
<body>
<%=#array%>
<hr>
<table border="1">
<% for k,v in pairs(array) do %>
<tr><td><%=k%></td><td><%=v%></td></tr>
<% end %>
</table>
</body>
</html>
分享到:
相关推荐
ngx_lua_module是一款强大的扩展模块,专为Nginx服务器设计,允许在Nginx配置文件中直接嵌入Lua脚本,极大地增强了Nginx的功能和灵活性。这个"ngx_lua_module-windows-1.1.2.0"是该模块的一个Windows版本,适应于...
4. 使用Nginx的configure脚本,通过指定--add-module选项添加NDK模块,例如:`./configure --add-module=路径/ngx_devel_kit-0.2.19`。 5. 编译并安装Nginx:`make && make install`。 6. 更新Nginx配置文件,启用...
用于nginx的http正向代理https使用的模块
lua-upstream-nginx-module, Nginx C 模块将Lua向ngx_lua公开,用于 Nginx upstreams 电子邮件名称ngx_http_lua_upstream - Nginx MODULE,用于向 Nginx upstreams公开Lua到 ngx_lua目录NAME状态概要说明函数get_...
Lua-Nginx-Module,简称lua-nginx-module,是Nginx服务器的一个重要扩展模块,它将强大的Lua脚本语言集成到Nginx中,允许用户在Nginx配置文件中直接编写Lua代码,极大地增强了Nginx的功能性和灵活性。版本0.10.13是...
ngx_lua_waf是一个基于Nginx的Web应用防火墙,其核心是利用了Nginx的ngx_lua模块,通过Lua脚本实现灵活且强大的安全防护功能。ngx_lua_waf项目名称中的“master”通常指的是该项目的主分支或最新版本。"nearly11h...
在安装和使用 "nginx-1.0.12_ngx-cache-purge1.5.tar.gz" 包之前,你需要确保系统已经安装了支持编译和安装 Nginx 及其扩展的必要工具,例如 gcc 编译器、pcre 库、zlib 库和 openssl 库。接下来,你需要解压下载的...
ngx_http_proxy_connect_module是一个针对Nginx服务器的第三方模块,主要功能是支持HTTP代理的"CONNECT"方法。在默认情况下,Nginx仅处理HTTP和HTTPS请求,但不支持通过HTTP代理进行TCP连接,比如SSL/TLS隧道。这个...
Nginx 支持模块化设计,允许开发者通过编写模块来扩展其功能。ngx_http_consistent_hash 模块是这样的一个例子,它将一致性哈希的功能集成到 Nginx 中。 4. **配置和使用:** 在 Nginx 配置文件中,用户需要引入...
Lua-Nginx-Module是Nginx服务器中一个强大的扩展模块,允许我们在Nginx配置文件中直接嵌入Lua脚本,极大地提高了Nginx处理动态请求的能力。本文将详细探讨该模块的版本0.10.9rc7及其在实际使用中的关键知识点。 ...
nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm...
nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=...
ngx_devel_kit(通常缩写为 NDK)是一个针对Nginx的模块开发工具集,它为构建自定义Nginx模块提供了便利。在Nginx生态系统中,NDK是一个重要的扩展工具,允许开发者利用C语言直接操作Nginx的内部结构,以实现更高级...
allow 192.168.1.0/24; # 只允许特定IP进行缓存清除 deny all; purge_method PURGE; } } } ``` 6. 重新加载或重启Nginx以使配置生效。 通过这个模块,开发者和运维人员可以更有效地管理Nginx的HTTP缓存,...
Lua-nginx-module是Nginx服务器的一个扩展模块,它允许我们在Nginx配置文件中直接嵌入 Lua 脚本,极大地增强了Nginx的功能性和灵活性。这个"lua-nginx-module-master.zip"压缩包包含了该模块的源代码,是安装和...
- 分别指定 Lua 外部库的路径(`.lua` 文件)和 C 编写的 Lua 外部库路径(`.so` 文件)。这允许开发者轻松地加载自定义的 Lua 库或第三方库。 - **init_by_lua / init_by_lua_file / init_worker_by_lua / init_...
3. **编译Nginx**:进入Nginx源码目录,将ngx_cache_purge源码添加到Nginx模块列表中,例如`./configure --add-module=path/to/ngx_cache_purge-2.0`。 4. **编译和安装Nginx**:运行`make`和`make install`命令,这...
描述中提到的"headers-more-nginx-module-0.30.tar.gz"进一步证实了这是一个版本号为0.30的模块源代码包,采用tar.gz格式进行压缩,这是Unix/Linux系统中常见的归档和压缩方式。用户通常需要先使用tar命令解压,再用...