Nginx-ngx_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文件是否cachelua_regex_cache_max_entries lua_regex_match_limit lua_package_path用Lua写的lua外部库路径(.lua文件)lua_package_cpath用C写的lua外部库路径(.so文件)init_by_luamaster进程启动时挂载的lua代码init_by_lua_file init_worker_by_luaworker进程启动时挂载的lua代码,常用来执行一些定时器任务init_worker_by_lua_file set_by_lua设置变量set_by_lua_file content_by_luahandler模块content_by_lua_file rewrite_by_lua rewrite_by_lua_file access_by_lua access_by_lua_file header_filter_by_luaheader filter模块header_filter_by_lua_file body_filter_by_luabody filter模块,ngx.arg代表输入的chunk,ngx.arg代表当前chunk是否为lastbody_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_timeoutTCP/unix 域socket对象connect方法的超时时间lua_socket_send_timeoutTCP/unix 域socket对象send方法的超时时间lua_socket_send_lowat设置cosocket send buffer的low water值lua_socket_read_timeoutTCP/unix 域socket对象receive方法的超时时间lua_socket_buffer_sizecosocket读buffer大小lua_socket_pool_sizecosocket连接池大小lua_socket_keepalive_timeoutcosocket长连接超时时间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.logprint等价于 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将参数字符串编码为一个tablengx.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进制MD5ngx.md5_bin返回2进制MD5ngx.sha1_bin返回2进制sha1哈希值ngx.quote_sql_strSQL语句转义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 constantsngx.OK (0)
ngx.ERROR (-1)
ngx.AGAIN (-2)
ngx.DONE (-4)
ngx.DECLINED (-5)
ngx.nilHTTP method constantsngx.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_TRACEHTTP status constantsngx.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 constantsngx.STDERR
ngx.EMERG
ngx.ALERT
ngx.CRIT
ngx.ERR
ngx.WARN
ngx.NOTICE
ngx.INFO
ngx.DEBUG
转自:http://www.cnblogs.com/wangxusummer/p/4309007.html
页:
[1]