`
fredlong
  • 浏览: 135015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lua 集成Niginx 内部变量函数集总

 
阅读更多

Nginx提供了很多内置的变量,如:

  • $arg_PARAMETER 这个变量包含在查询字符串时GET请求PARAMETER的值。
  • $args 这个变量等于请求行中的参数。
  • $binary_remote_addr 二进制码形式的客户端地址。
  • $body_bytes_sent 传送页面的字节数
  • $content_length 请求头中的Content-length字段。
  • $content_type 请求头中的Content-Type字段。
  • $cookie_COOKIE cookie COOKIE的值。
  • $document_root 当前请求在root指令中指定的值。
  • $document_uri 与$uri相同。
  • $host 请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。
  • $is_args 如果$args设置,值为"?",否则为""。
  • $limit_rate 这个变量可以限制连接速率。
  • $nginx_version 当前运行的nginx版本号。
  • $query_string 与$args相同。
  • $remote_addr 客户端的IP地址。
  • $remote_port 客户端的端口。
  • $remote_user 已经经过Auth Basic Module验证的用户名。
  • $request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。
  • $request_body 这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
  • $request_body_file 客户端请求主体信息的临时文件名。
  • $request_completion 未知。
  • $request_method 这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
  • $request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
  • $scheme 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
  • $server_addr 服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
  • $server_name 服务器名称。
  • $server_port 请求到达服务器的端口号。
  • $server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
  • $uri 请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。

另外:HTTP_X_FORWARDED_FOR是透过代理服务器取得客户端的真实IP地址,有些用此方法读取到的仍然是代理服务器的IP。还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 HTTP_X_FORWARDED_FOR 取到的值将是空的。

 

ngx_lua 模块提供的指令和API等:

指令名称 说明
lua_use_default_type 是否使用default_type指令定义的Content-Type默认值
lua_code_cache *_by_lua_file文件是否cache
lua_regex_cache_max_entries  
lua_regex_match_limit  
lua_package_path 用Lua写的lua外部库路径(.lua文件)
lua_package_cpath 用C写的lua外部库路径(.so文件)
init_by_lua master进程启动时挂载的lua代码
init_by_lua_file  
init_worker_by_lua worker进程启动时挂载的lua代码,常用来执行一些定时器任务
init_worker_by_lua_file  
set_by_lua 设置变量
set_by_lua_file  
content_by_lua handler模块
content_by_lua_file  
rewrite_by_lua  
rewrite_by_lua_file  
access_by_lua  
access_by_lua_file  
header_filter_by_lua header filter模块
header_filter_by_lua_file  
body_filter_by_lua body filter模块,ngx.arg[1]代表输入的chunk,ngx.arg[2]代表当前chunk是否为last
body_filter_by_lua_file  
log_by_lua  
log_by_lua_file  
lua_need_request_body 是否读请求体,跟ngx.req.read_body()函数作用类似
lua_shared_dict 创建全局共享的table(多个worker进程共享)
lua_socket_connect_timeout TCP/unix 域socket对象connect方法的超时时间
lua_socket_send_timeout TCP/unix 域socket对象send方法的超时时间
lua_socket_send_lowat 设置cosocket send buffer的low water值
lua_socket_read_timeout TCP/unix 域socket对象receive方法的超时时间
lua_socket_buffer_size cosocket读buffer大小
lua_socket_pool_size cosocket连接池大小
lua_socket_keepalive_timeout cosocket长连接超时时间
lua_socket_log_errors 是否打开cosocket错误日志
lua_ssl_ciphers  
lua_ssl_crl  
lua_ssl_protocols  
lua_ssl_trusted_certificate  
lua_ssl_verify_depth  
lua_http10_buffering  
rewrite_by_lua_no_postpone  
lua_transform_underscores_in_response_headers  
lua_check_client_abort 是否监视client提前关闭请求的事件,如果打开监视,会调用ngx.on_abort()注册的回调
lua_max_pending_timers  
lua_max_running_timers  

 

 

 

table 说明
ngx.arg 指令参数,如跟在content_by_lua_file后面的参数
ngx.var 变量,ngx.var.VARIABLE引用某个变量
ngx.ctx 请求的lua上下文
ngx.header 响应头,ngx.header.HEADER引用某个头
ngx.status 响应码
   
API 说明
ngx.log 输出到error.log
print 等价于 ngx.log(ngx.NOTICE, ...)
ngx.send_headers 发送响应头
ngx.headers_sent 响应头是否已发送
ngx.resp.get_headers 获取响应头
ngx.timer.at 注册定时器事件
ngx.is_subrequest 当前请求是否是子请求
ngx.location.capture 发布一个子请求
ngx.location.capture_multi 发布多个子请求
ngx.exec  
ngx.redirect  
ngx.print 输出响应
ngx.say 输出响应,自动添加'\n'
ngx.flush 刷新响应
ngx.exit 结束请求
ngx.eof  
ngx.sleep 无阻塞的休眠(使用定时器实现)
ngx.get_phase  
ngx.on_abort 注册client断开请求时的回调函数
ndk.set_var.DIRECTIVE  
ngx.req.start_time 请求的开始时间
ngx.req.http_version 请求的HTTP版本号
ngx.req.raw_header 请求头(包括请求行)
ngx.req.get_method 请求方法
ngx.req.set_method 请求方法重载
ngx.req.set_uri 请求URL重写
ngx.req.set_uri_args  
ngx.req.get_uri_args 获取请求参数
ngx.req.get_post_args 获取请求表单
ngx.req.get_headers 获取请求头
ngx.req.set_header  
ngx.req.clear_header  
ngx.req.read_body 读取请求体
ngx.req.discard_body 扔掉请求体
ngx.req.get_body_data  
ngx.req.get_body_file  
ngx.req.set_body_data  
ngx.req.set_body_file  
ngx.req.init_body  
ngx.req.append_body  
ngx.req.finish_body  
ngx.req.socket  
ngx.escape_uri 字符串的url编码
ngx.unescape_uri 字符串url解码
ngx.encode_args 将table编码为一个参数字符串
ngx.decode_args 将参数字符串编码为一个table
ngx.encode_base64 字符串的base64编码
ngx.decode_base64 字符串的base64解码
ngx.crc32_short 字符串的crs32_short哈希
ngx.crc32_long 字符串的crs32_long哈希
ngx.hmac_sha1 字符串的hmac_sha1哈希
ngx.md5 返回16进制MD5
ngx.md5_bin 返回2进制MD5
ngx.sha1_bin 返回2进制sha1哈希值
ngx.quote_sql_str SQL语句转义
ngx.today 返回当前日期
ngx.time 返回UNIX时间戳
ngx.now 返回当前时间
ngx.update_time 刷新时间后再返回
ngx.localtime  
ngx.utctime  
ngx.cookie_time 返回的时间可用于cookie值
ngx.http_time 返回的时间可用于HTTP头
ngx.parse_http_time 解析HTTP头的时间
ngx.re.match  
ngx.re.find  
ngx.re.gmatch  
ngx.re.sub  
ngx.re.gsub  
ngx.shared.DICT  
ngx.shared.DICT.get  
ngx.shared.DICT.get_stale  
ngx.shared.DICT.set  
ngx.shared.DICT.safe_set  
ngx.shared.DICT.add  
ngx.shared.DICT.safe_add  
ngx.shared.DICT.replace  
ngx.shared.DICT.delete  
ngx.shared.DICT.incr  
ngx.shared.DICT.flush_all  
ngx.shared.DICT.flush_expired  
ngx.shared.DICT.get_keys  
ngx.socket.udp  
udpsock:setpeername  
udpsock:send  
udpsock:receive  
udpsock:close  
udpsock:settimeout  
ngx.socket.tcp  
tcpsock:connect  
tcpsock:sslhandshake  
tcpsock:send  
tcpsock:receive  
tcpsock:receiveuntil  
tcpsock:close  
tcpsock:settimeout  
tcpsock:setoption  
tcpsock:setkeepalive  
tcpsock:getreusedtimes  
ngx.socket.connect  
ngx.thread.spawn  
ngx.thread.wait  
ngx.thread.kill  
coroutine.create  
coroutine.resume  
coroutine.yield  
coroutine.wrap  
coroutine.running  
coroutine.status  
ngx.config.debug 编译时是否有 --with-debug选项
ngx.config.prefix 编译时的 --prefix选项
ngx.config.nginx_version 返回nginx版本号
ngx.config.nginx_configure 返回编译时 ./configure的命令行选项
ngx.config.ngx_lua_version 返回ngx_lua模块版本号
ngx.worker.exiting 当前worker进程是否正在关闭(如reload、shutdown期间)
ngx.worker.pid 返回当前worker进程的pid
   
   
   
常量 说明
Core constants ngx.OK (0)
ngx.ERROR (-1)
ngx.AGAIN (-2)
ngx.DONE (-4)
ngx.DECLINED (-5)
ngx.nil
HTTP method constants ngx.HTTP_GET
ngx.HTTP_HEAD
ngx.HTTP_PUT
ngx.HTTP_POST
ngx.HTTP_DELETE
ngx.HTTP_OPTIONS  
ngx.HTTP_MKCOL    
ngx.HTTP_COPY      
ngx.HTTP_MOVE     
ngx.HTTP_PROPFIND 
ngx.HTTP_PROPPATCH 
ngx.HTTP_LOCK 
ngx.HTTP_UNLOCK    
ngx.HTTP_PATCH   
ngx.HTTP_TRACE  
HTTP status constants ngx.HTTP_OK (200)
ngx.HTTP_CREATED (201)
ngx.HTTP_SPECIAL_RESPONSE (300)
ngx.HTTP_MOVED_PERMANENTLY (301)
ngx.HTTP_MOVED_TEMPORARILY (302)
ngx.HTTP_SEE_OTHER (303)
ngx.HTTP_NOT_MODIFIED (304)
ngx.HTTP_BAD_REQUEST (400)
ngx.HTTP_UNAUTHORIZED (401)
ngx.HTTP_FORBIDDEN (403)
ngx.HTTP_NOT_FOUND (404)
ngx.HTTP_NOT_ALLOWED (405)
ngx.HTTP_GONE (410)
ngx.HTTP_INTERNAL_SERVER_ERROR (500)
ngx.HTTP_METHOD_NOT_IMPLEMENTED (501)
ngx.HTTP_SERVICE_UNAVAILABLE (503)
ngx.HTTP_GATEWAY_TIMEOUT (504) 
Nginx log level constants ngx.STDERR
ngx.EMERG
ngx.ALERT
ngx.CRIT
ngx.ERR
ngx.WARN
ngx.NOTICE
ngx.INFO
ngx.DEBUG

 
 
分享到:
评论

相关推荐

    lua-nginx-module-0.10.9rc7

    ngx_devel_kit(简称ndk)是一个用于开发Nginx模块的工具集,它提供了很多用于编写C语言扩展的便利函数。在0.10.9rc7这个版本中,可能需要特定的ndk版本才能确保所有功能正常运行。如果版本不匹配,可能会遇到如时间...

    lua-nginx-module完全指南.docx

    这些API使得Lua脚本可以访问和操作Nginx的各种内部状态,如服务器变量、请求对象、上游服务器等,极大地增强了Nginx的灵活性。 在实际应用中,`set_by_lua`和`set_by_lua_block`用于在HTTP上下文中设置变量,而`...

    Nginx-ngx_lua模块原理和内置函数.docx

    ### Nginx ngx_lua 模块原理与内置函数详解 #### 概述 Nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,而 ngx_lua 模块则是 Nginx 的一个强大扩展,它允许在 Nginx 中直接嵌入 Lua 脚本进行动态内容处理和请求...

    Lua程序设计.pdf_lua_nginx_

    Lua与Nginx的整合主要通过OpenResty(一个基于Nginx的高性能Web平台,集成了LuaJIT和一系列工具库)来实现。OpenResty提供了ngx_lua模块,允许我们在Nginx服务器端直接运行Lua脚本,实现高性能的动态内容生成和处理...

    nginx实战-基于lua语言

    1. **动态配置**:通过Lua,我们可以实现动态加载和更新Nginx配置,比如根据环境变量或外部数据源调整路由策略。 2. **API处理**:对于简单的RESTful API,可以直接在Nginx中用Lua编写业务逻辑,减轻后端服务器的...

    Nginx安装lua-nginx-module模块的方法步骤

    ngx_lua_module,也被称为lua-nginx-module,是一个...总的来说,lua-nginx-module的安装过程虽然涉及多个步骤,但只要按照正确的顺序和配置进行,就可以轻松地在Nginx中启用Lua编程能力,实现高效、灵活的Web服务。

    Nginx+lua通过url传参的方式实现动态代理

    - `ngx.var.remotePort = arg["port"]`:通过`arg["port"]`获取名为`port`的参数值,并将其赋值给Nginx变量`$remotePort`。 #### 总结 通过以上步骤,我们成功实现了基于Nginx+Lua的动态代理功能。这种方案不仅...

    Nginx+Lua编程手册.pdf

    接下来,我将根据文件内容详细介绍Lua脚本语言的基础知识以及Nginx+Lua的集成知识。 Lua是一种小巧灵活的脚本语言,它在计算机领域有着广泛的应用,尤其是在游戏开发、嵌入式系统以及HTTP服务器中。Lua语言的学习...

    使用Lua编写Nginx服务器的认证模块的方法

    最终,我们选择了Lua,因为它与Nginx的原生集成较好,且能避免对每个请求进行认证。 为了解决状态存储问题,我们采用了加密签名的方法。我们为用户提供包含用户名和过期时间的签名cookie,以验证用户身份。在Nginx...

    Nginx添加lua模块的实现方法

    总的来说,Nginx添加Lua模块的过程涉及到下载和编译多个组件,以及配置Nginx的编译选项。这个过程可能需要一定的Linux和编译知识,但一旦完成,就可以利用Lua的强大能力来增强Nginx的处理逻辑,实现更复杂的业务需求...

    lua-5.2.0 安装包

    9. **编程特性**:Lua 5.2.0引入了一些新的特性,如新的字面量表示法(如表的短括号语法),新的错误处理机制(使用error函数而不是直接抛出C异常),以及改进的局部变量管理。 10. **应用场景**:Lua广泛应用于...

    ngx_lua资源

    总的来说,ngx_lua 是一个强大的工具,它扩展了 Nginx 的功能,使得开发者可以用 Lua 这种简洁且高性能的语言来编写复杂的 Web 应用。通过深入学习 ngx_lua,开发者可以构建出更加高效、灵活的 Web 服务。在 Windows...

    lua一点代码

    1. **Lua 与 Nginx 的集成**: - ngx_lua 模块:Nginx 通过 ngx_lua 模块实现了对 Lua 语言的支持。这个模块允许我们在 Nginx 配置文件中直接插入 Lua 脚本,或者调用外部 Lua 脚本来处理请求。 2. **Lua 脚本的...

    lua-resty-ctxdump:存放并应用旧的ngx.ctx以避免在Nginx内部重定向发生后被破坏

    `lua-resty-ctxdump` 是一个针对 Nginx 使用 OpenResty(一个基于 Nginx 和 Lua 的高性能 Web 平台)时的模块,它主要解决了一个特定问题:在 Nginx 内部重定向过程中,`ngx.ctx` 变量可能被破坏。`ngx.ctx` 是 ...

    使用nginx+lua实现信息访问量统计

    4. Nginx变量与Lua数据交换:Nginx提供了内置变量来获取当前请求的信息,如客户端IP地址(remote_addr)、URI参数(req.get_uri_args())。Lua脚本可以读取这些变量,并根据其逻辑来决定如何操作Memcached。 5. ...

    Lua学习资料PDF

    1. **基础语法**:Lua的语法与C语言类似,包括变量(全局和局部)、赋值、数据类型(如数字、字符串、布尔、表、函数和nil)。变量在Lua中是动态类型的,不需要预先声明。 2. **表**:Lua中的表是其核心数据结构,...

    ngx_devel_kit-0.3.0

    ngx_devel_kit,简称NDK,是一款专为Nginx设计的第三方模块开发工具,其核心目的是简化和加速Nginx...总的来说,NDK是Nginx扩展能力的一个强大工具,对于想要深入Nginx定制化开发的工程师来说,是不可或缺的学习资源。

    LUA library

    1. **全局环境(Global Environment)**:在Lua中,所有全局变量都存储于全局环境表中,这个表在内部被称为_G。LUA library中的函数和常量通常都会在这个环境中定义。 2. **元表(Metatables)**:Lua允许用户...

    Lua脚本编辑器,简单编辑开发

    - 使用LuaEditor开发针对nginx的扩展,可以方便地编写和测试Lua代码,然后将其集成到nginx配置中,以实现高度定制的服务逻辑。 5. **开发流程**: - 首先,安装并配置LuaEditor_v.0.2.2,确保其在64位Windows环境...

Global site tag (gtag.js) - Google Analytics