当前位置 : 主页 > 网络编程 > lua >

ngx_lua 模块

来源:互联网 收集:自由互联 发布时间:2021-06-23
ngx_lua模块的原理: 1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM; 2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问; 3、每个外部请求都由一个Lua协程处理,

ngx_lua模块的原理:

1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
3、每个外部请求都由一个Lua协程处理,协程之间数据隔离;
4、Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
5、I/O等异步操作完成时还原相关协程上下文数据,并继续运行;

 

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.STDERRngx.EMERGngx.ALERTngx.CRITngx.ERRngx.WARNngx.NOTICEngx.INFOngx.DEBUG
网友评论