[list]
如何获取HTTP请求头?
直接在 ngx_lua 中访问 NginX 内置变量 ngx.var.http_HEADER 即可获得请求头 HEADER 的内容。对于常见的特殊头(Content-Type、Cookie 等),NginX 还使用了特殊的变量来独立保存,例如“Content-Type”头可以通过 ngx.var.content_type 变量取得。
如何获取GET参数?
在 ngx_lua 中访问 NginX 内置变量 ngx.var.arg_PARAMETER 即可获得GET参数PARAMETER的内容。
如何获取POST请求体数据?
要获得完整的POST请求体数据,可以访问 NginX 内置变量 ngx.var.request_body(注意:由于 NginX 默认在处理请求前不自动读取 request body,所以目前必须显式借助 form-input-nginx 模块才能从该变量得到请求体,否则该变量内容始终为空!)。如果想获取 POST 方式提交的表单参数,还可以借助 form-input-nginx 模块省去解析过程。例如:
location /form {
set_form_input $name;
content_by_lua '
local name = ngx.var.name or "";
local say = ngx.say
say("My name is: ", name)
';
}
如何设置/获取HTTP响应头?
我们已经设计了对应的API接口,近期即会予以实现。
如何使用 Lua 外部模块?
通过 require 引用即可,和在普通的 Lua 代码里一样。需要注意的一点是,通过 require 引用外部模块一般有 2 种写法。老的写法是:
require("xxx")
这样会将模块命名空间表直接导入当前全局环境内;而新的写法是:
local xxx = require("xxx")
这样的写法将模块命名空间表缓存在同名局部变量中,访问更快,也不会污染当前全局环境。但最重要的一点是:
老的写法在 ngx_lua 中会出现模块导入后无法访问的现象!这是由 ngx_lua 实现原理决定的。ngx_lua 使用每请求一个 coroutine 的方式运行用户代码,coroutine 的全局环境是重新关联的,因此用户代码相当于运行在一个沙盒中,请求处理结束后用户代码产生的所有全局环境修改都会被舍弃,避免多个请求之间产生交叉影响,也降低了因滥用全局环境产生内存泄漏的风险。而 require 利用了全局共享的 package.loaded 表缓存已载入模块的数据,以达到避免重复加载模块的目的。很明显,这种结构必然会使首个请求中通过 require 注入全局环境的模块命名空间表在后续请求中无法访问,因为后续请求中 package.loaded 表内已经有之前加载模块的数据,故 require 不会再次将命名空间表注入当前全局环境,使得以后所有依赖于模块的操作都失败。
鉴于这一问题,
我们推荐开发人员总是使用新的 require 写法(即使用局部变量缓存模块表),对于那些因为某种原因无法更新 require 写法的代码,可以通过在开始处理请求前清空 package.loaded 表中对应模块数据的方式强制加载模块并注入全局环境(注意每次都加载模块可能产生性能瓶颈!),例如:
package.loaded.xxx = nil
require("xxx")
[/list]
参考:
- http://wiki.nginx.org/NginxHttpCoreModule#Variables
- http://github.com/calio/form-input-nginx-module
分享到:
相关推荐
ngx_lua_module是一款强大的扩展模块,专为Nginx服务器设计,允许在Nginx配置文件中直接嵌入Lua脚本,极大地增强了Nginx的功能和灵活性。这个"ngx_lua_module-windows-1.1.2.0"是该模块的一个Windows版本,适应于...
ngx_lua 是一个强大的 Lua 脚本绑定模块,用于 ngx_openresty,这是一个全面的、高性能的、企业级的 Lua 开发平台,基于 Nginx。ngx_lua 允许开发者在 Nginx 的事件驱动、非阻塞 I/O 模型下编写服务器端的 Lua 应用...
ngx_lua是Nginx的一个模块,它通过Lua语言和协程机制解决了传统架构并发度低、内存开销大和开发维护困难的问题。其提供的异步非阻塞I/O访问接口使得业务逻辑的开发变得更加简洁高效。ngx_lua的设计充分发挥了Lua的轻...
ngx_lua_waf是一个基于Nginx的Web应用防火墙,其核心是利用了Nginx的ngx_lua模块,通过Lua脚本实现灵活且强大的安全防护功能。ngx_lua_waf项目名称中的“master”通常指的是该项目的主分支或最新版本。"nearly11h...
根据提供的文件内容,这篇文档主要围绕在UPYUN云平台上使用ngx_lua模块与Nginx结合进行编程和配置的详细指南。下面将详细梳理这些知识点。 ### 标题知识点 - **ngx_lua**: 这是Nginx的一个模块,它允许Nginx执行Lua...
Nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,而 ngx_lua 模块则是 Nginx 的一个强大扩展,它允许在 Nginx 中直接嵌入 Lua 脚本进行动态内容处理和请求/响应的修改。这种集成不仅提高了 Nginx 的灵活性,还极...
1. **ngx_lua 模块介绍**:ngx_lua 是由 OpenResty(一个基于 Nginx 的高性能 Web 开发框架)提供的,它允许在 Nginx 配置文件中直接编写 Lua 脚本,实现了 HTTP 请求的实时处理,包括请求的接收、响应的构建以及与...
lua-resty-websocket, 对ngx_lua模块( 和 OpenResty )的web socket支持 电子邮件名称lua-resty-websocket - ngx_lua模块的Lua web socket实现 table-内容名称状态描述概要说明模块resty.websocket.server方法新插件...
本文将介绍如何在CentOS 7 64位系统上配置Nginx服务器,集成ngx_lua模块以支持Web应用防火墙(WAF)防护功能。Nginx是一款轻量级、高性能的Web服务器和反向代理服务器,因其高效并发处理能力而被广泛应用于各大...
总结,Lua-Nginx-Module 0.10.13是Nginx的强大扩展,它将Lua语言的灵活性和Nginx的高性能结合起来,为Web开发提供了新的可能。通过学习和掌握lua-nginx-module,开发者可以构建出更加高效、可维护的Web服务。在实际...
ngx_lua_php_queue是一个开源项目,它利用Nginx的lua模块、PHP以及Redis来构建一个单业务排队系统架构。这个架构旨在解决高并发场景下,确保请求按序处理,防止资源争抢,优化服务性能的问题。以下是这个系统架构的...
3. **配置Nginx**:在Nginx的配置文件中,启用lua模块并指定Lua脚本的路径。例如,使用`lua_code_cache on|off`来控制Lua代码缓存策略,用`set_by_lua_file`或`access_by_lua_file`等指令执行Lua脚本。 4. **测试与...
在Nginx服务器中,使用lua获取get或post参数是通过ngx_lua模块来实现的。ngx_lua模块是Nginx的一个第三方模块,提供了在Nginx中使用Lua语言的能力。 首先,我们可以使用ngx.var.request_method获取当前请求的方法是...
ngx_openresty是一个高度集成的Nginx发行版,它包含了一个强大的动态脚本语言LuaJIT,并且集成了许多第三方模块,使得开发者能够轻松地构建高性能的Web应用和服务。ngx_openresty-1.9.3.2是该发行版的一个特定版本,...
- **故障细节分析**:学习在OpenResty开发中常见问题的排查方法和技巧。 - **调试技术**:掌握调试OpenResty Lua脚本的多种技术。 ### OpenResty周边技术 - **Vanilla/香草工具**:学习如何安装和使用火焰图生成...
ngx_openresty是一款基于Nginx的全功能Web平台,它集成了许多强大的Lua扩展模块,使得Nginx不仅能够处理静态文件和反向代理,还能执行动态脚本,实现高性能的Web应用服务器功能。在Linux环境下,安装ngx_openresty...
lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装OpenResty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。...
ngx_openresty是一款基于Nginx的全功能Web平台,它集成了LuaJIT脚本语言,使得开发者能够利用Lua的高效性能来扩展Nginx的功能,构建高性能的Web服务和API后端。OpenResty的目标是提供一个完整的、端到端的解决方案,...