现在我已经将翻译的内容放到:http://wiki.nginx.org/HttpLuaModuleZh

Nginx API for Lua

Introduction

各种各样的*_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

强烈不推荐使用package.seeall标志,这样会引起很多意想不到的后果。

也可以直接引用LUA包:

    local ngx = require "ngx"
local ndk = require "ndk"

在我们的代码里面使用网络I/O操作时,最好使用LUA的API,因为NGINX是非阻塞的,如果不这样做可能死循环或者导致性能的直线下降。磁盘操作的数据量相对较小,可以采用标准的Lua的IO库,但巨大的文件阅读和写作应尽可能避免。为了发挥NGINX的性能,强烈建议所有的网络和磁盘I/O操作Nginx的子请求(通过ngx.location.capture方法和类似)都不要阻塞NGINX进程。

ngx.arg

语法:val = ngx.arg[index]

环境:set_by_lua*,body_filter_by_lua*

当它运行在set_by_lua或者set_by_lua_file指令的时候,这个table是只读的并且包括配置指令的输入参数,例如:value = ngx.arg[n]

这里有个例子:

    location /foo {
set $a 32;
set $b 56; set_by_lua $res
'return tonumber(ngx.arg[1]) + tonumber(ngx.arg[2])'
$a $b; echo $sum;
}

输出的结果是 88

当table是根据body_filter_by_lua或body_filter_by_lua_file的上下文使用的时候,第一个元素,在过滤器的输出代码中保存的输入数据块和所述第二元件持有“EOF”的标志,表示整个输出数据流的结束的布尔标志。

数据块和“EOF”标志传递给下游的Nginx的输出滤波器,直接对应的表元素赋值,也可以覆盖。当设置为零或空的Lua字符串值ngx.arg的[1],没有数据块会被传递给所有的下游的Nginx的输出滤波器。

ngx.var.VARIABLE

语法:ngx.var.var_name

语境:set_by_lua*,rewrite_by_lua*,access_by_lua...

读写NGNIX变量。

    value = ngx.var.some_nginx_variable_name
ngx.var.some_nginx_variable_name = value

不仅仅可以读,也可以写,例如:

    location /foo {
set $my_var ''; # this line is required to create $my_var at config time
content_by_lua '
ngx.var.my_var = 123;
...
';
}

当然,NGNIX不能凭空被添加。一些特殊的NGINX变量,比如$args和$limit_rate能够被赋值,有些不能,比如$arg_PARAMETER。

给ngx.var.Foo一个nil,将会取消NGINX的$Foo变量。

警告:当从nginx读取变量,NGINX会给每一个请求的内存池分配内存,他在内存终止的时候会释放出来,所以当你需要读取NGINX变量的时候,你的LUA变量会缓存NGINX变量,例如:

    local val = ngx.var.some_var
--- use the val repeatedly later

防止临时请求请求周期内的内存泄漏。

Core constants

环境:init_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua, *log_by_lua*, ngx.timer.*

  ngx.OK (0)
ngx.ERROR (-1)
ngx.AGAIN (-2)
ngx.DONE (-4)
ngx.DECLINED (-5)

注意:只有三种常量被NGNIX LUA使用(ngx.exit()只接收 NGX_OK, NGX_ERROR, 和NGX_DECLINED)

ngx.null是NULL,在LUA中是nil,类似于lua-cjson的cjson.null。

HTTP method constants

环境:init_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua, log_by_lua*, ngx.timer.*

  ngx.HTTP_GET
ngx.HTTP_HEAD
ngx.HTTP_PUT
ngx.HTTP_POST
ngx.HTTP_DELETE
ngx.HTTP_OPTIONS (added in the v0.5.0rc24 release)
ngx.HTTP_MKCOL (added in the v0.8.2 release)
ngx.HTTP_COPY (added in the v0.8.2 release)
ngx.HTTP_MOVE (added in the v0.8.2 release)
ngx.HTTP_PROPFIND (added in the v0.8.2 release)
ngx.HTTP_PROPPATCH (added in the v0.8.2 release)
ngx.HTTP_LOCK (added in the v0.8.2 release)
ngx.HTTP_UNLOCK (added in the v0.8.2 release)
ngx.HTTP_PATCH (added in the v0.8.2 release)
ngx.HTTP_TRACE (added in the v0.8.2 release) 

这些变量经常在ngx.location.capture 或者 ngx.location.capture_multi方法中被调用

HTTP status constants

环境:init_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua, log_by_lua*, ngx.timer.*

  value = ngx.HTTP_OK ()
value = ngx.HTTP_CREATED ()
value = ngx.HTTP_SPECIAL_RESPONSE ()
value = ngx.HTTP_MOVED_PERMANENTLY ()
value = ngx.HTTP_MOVED_TEMPORARILY ()
value = ngx.HTTP_SEE_OTHER ()
value = ngx.HTTP_NOT_MODIFIED ()
value = ngx.HTTP_BAD_REQUEST ()
value = ngx.HTTP_UNAUTHORIZED ()
value = ngx.HTTP_FORBIDDEN ()
value = ngx.HTTP_NOT_FOUND ()
value = ngx.HTTP_NOT_ALLOWED ()
value = ngx.HTTP_GONE ()
value = ngx.HTTP_INTERNAL_SERVER_ERROR ()
value = ngx.HTTP_METHOD_NOT_IMPLEMENTED ()
value = ngx.HTTP_SERVICE_UNAVAILABLE ()
value = ngx.HTTP_GATEWAY_TIMEOUT () (first added in the v0..1rc38 release)

Nginx log level constants

  ngx.STDERR
ngx.EMERG
ngx.ALERT
ngx.CRIT
ngx.ERR
ngx.WARN
ngx.NOTICE
ngx.INFO
ngx.DEBUG

print

语法:print(...)

环境:init_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua, log_by_lua*, ngx.timer.*

以ngx.NOTICE的日志级别写入到nginx的error.log文件。他等价于:ngx.log(ngx.NOTICE, ...)

LUA可以接收nil参数,并且等价于字符串"nil"。同样适用于ngx的布尔型的变量"true"和"false"。ngx.null将会以字符串"null"输出。

NGINX有一个硬编码的错误,一条日志只能在2048个字节内。如果多余这些个数,将会被截取。如果想要修改这个限制,需要修改NGINX的源代码,位于src/core/ngx_log.h的NGX_MAX_ERROR_STR宏。

HttpLuaModule——翻译(Nginx API for Lua)的更多相关文章

  1. HttpLuaModule——翻译(Nginx API for Lua) (转)

    现在我已经将翻译的内容放到:http://wiki.nginx.org/HttpLuaModuleZh Nginx API for Lua Introduction 各种各样的*_by_lua和*_b ...

  2. openresty HTTP status constants nginx api for lua

    https://github.com/openresty/lua-nginx-module context: init_by_lua, set_by_lua, rewrite_by_lua, acce ...

  3. Nginx 内嵌lua脚本,结合Redis使用

    0x00 Nginx 内嵌Lua脚本有下面特点: 20k个并发连接 Lua脚本能够在Nignx 11个层次的不同层次发挥作用,扩展Ngnix功能 Lua速度极快(寄存器指令) 0x01 应用场景 在w ...

  4. OpenResty / Nginx模块,Lua库和相关资源的列表

    OpenResty / Nginx模块,Lua库和相关资源的列表 什么是OpenResty OpenResty是一个成熟的网络平台,它集成了标准的Nginx核心,LuaJIT,许多精心编写的Lua库, ...

  5. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  6. 导出 C/C++ API 给 Lua 使用[转]

    导出 C/C++ API 给 Lua 使用   cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua ...

  7. 使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译

    1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...

  8. Nginx 中利用 Lua 脚本做访问控制

    使用场景 需要在后端服务之前做访问控制,或没有后端服务的场景,如静态文件. 实验环境 Ubuntu 14.04 Nginx 1.4.6 安装 Lua 运行环境 sudo apt-get install ...

  9. 在PHP5.4上使用Google翻译的API报错

    /********************************************************************** * 在PHP5.4上使用Google翻译的API报错 * ...

随机推荐

  1. Oracle简易界面工具 (Oracle 10g, Oracle 11g)

    Oracle简易界面工具 背景:偶在远程机上干活,须要调用到 Oracle 11gserver的数据,远程机上已安装Oracle client, 但 sql plus 和 sql developer ...

  2. SharePoint 列表视图修改多行文本字段显示长度

    前言 最近有这么个需求,用户希望在所有项目视图显示多行文本字段,然后,又不希望显示的过场,也就是处理一下长度. 一开始就想到用js的方式去处理,偶然间发现还可以用jslink,尝试了一下,非常好用,分 ...

  3. 哥谭第一季/全集Gotham迅雷下载

    哥谭市 第一季 Gotham (2014)本季看点:<哥谭镇>将由丹尼·加农掌镜,布鲁诺·海勒执笔剧本.电视剧集<哥谭>可以说<蝙蝠侠>的前传,剧集描述的是DC漫画 ...

  4. 用wifi来调试应用程序

    我们一般调试程序都是用的adb,这个adb其实是可以连接到某个端口的,只要我们的手机和电脑处于同一wifi环境下(你可以用电脑分出来的wifi),手机也接入同一端口就可以实现程序的无线调试了,终于可以 ...

  5. WebView入门

    webview是Android展示网页信息的控件,本文就来简要讲解这个控件的用法.关于webview我找到了一些很不错的文章,我就直接贴上连接,自己就不重复造轮子了.本文仅写出我本人目前使用过的东西, ...

  6. ImageView中scaleType属性详解

    scaleType是指定图片的拉伸方式的一个属性,下面是具体的示例和介绍: <LinearLayout xmlns:android="http://schemas.android.co ...

  7. jquery获取table,遍历输出tr中各个td的内容(转载)

    首先,依赖jquery.. 1 $('#btntb').click(function(){ 2 $('#tab tr').each(function(i){ // 遍历 tr 3 $(this).ch ...

  8. [转] hive0.14-insert、update、delete操作测试

    FROM : http://blog.csdn.net/hi_box/article/details/40820341 首先用最普通的建表语句建一个表: hive>create table te ...

  9. 本地git库gitlab库链接服务器库 idea git 配置 gitlab 配置 git生成ssh公钥

    下载git  https://git-scm.com/ 安装以后会右键菜单出现Git Base Here 点击Git Base Here   输入 cd ~ 进入你的用户根目录 创建文件夹 mkdir ...

  10. 【BZOJ】【3931】【CQOI2015】网络吞吐量

    最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ /********************** ...