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文件是否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 |
等价于 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 |
ngx_lua 模块的更多相关文章
- ngx_lua 模块详细讲解(基于openresty)
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- LNMP平滑升级nginx并安装ngx_lua模块教程
#ngx_lua module项目地址 https://github.com/chaoslawful/lua-nginx-module 在LNMP安装包后,重编译nginx,并添加ngx_lua模块 ...
- OpenResty之ngx_lua模块的加密接口
原文: ngx_Lua模块中的加密api接口 ngx.crc32_short digest = ngx.crc32_short(str) 该方法主要是计算给定字符串 str 的循环校验码(Cyclic ...
- ngx_lua模块
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- ngx_lua模块学习示例之waf
转自:http://www.tuicool.com/articles/FbQ3ymB WAF的主要功能为: ip黑白名单 url黑白名单 useragent黑白名单 referer黑白名单 常见web ...
- 基于ngx_lua模块的waf开发实践
0x00 常见WAF简单分析 WAF主要分为硬件WAF和软件防火墙,硬件WAF如绿盟的NSFOCUS Web Application Firewall,软件防火墙比较有名的是ModSecurity,再 ...
- Nginx-Lua模块的执行顺序
一.nginx执行步骤 nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读<深入理解nginx:模块开发与架构解析>这本书, ...
- Nginx-ngx_lua模块原理和内置函数
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- 使用ngx_lua构建高并发应用(1)
转自:http://blog.csdn.net/chosen0ne/article/details/7304192 一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apa ...
随机推荐
- 1. svg学习笔记-在网页中使用svg
在网页中使用svg有以下三种方式 1. svg归根结底来说是一种图像格式,虽然有别于jpeg,gif,png等位图图像格式,所以在网页中能嵌入图像的地方都可以嵌入svg,例如将svg文件设置为< ...
- momentjs 学习
momentjs 是一个JavaScript日期处理类库,官网地址:http://momentjs.com/ 字符串 + 格式 moment(String, String); moment(Strin ...
- Solr全文检索
1.Solr的安装 .环境要求 jdk1.+tomcat8+solr5.5.0 .将以上的软件包上传到服务器 . 安装tomcat8(解压文件) tar -zxvf apache-tomcat-.ta ...
- 【PAT】B1085 PAT单位排行(25 分)(c++实现)
终于做的有点眉目了,今天学习了一点stl的皮毛,解题瞬间变容易了 下边开始分析本题 这道题如果用纯c解决实在太麻烦,试了半天两个超时,果断放弃,还是用map方便: 我的方法与柳神的方法是有区别的,我只 ...
- nginx 编译安装时的编译参数说明(不建议看)
https://www.cnblogs.com/wazy/p/8108824.html ./configure --user=www \ #worker进程运行用户 --group=www \ #wo ...
- C++基础算法学习——汉洛塔问题
汉诺塔问题古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中, ...
- 软件工程实践_Task1
(1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? 说起来,当初选择计算机专业的缘由,更多应该归因于兴趣.虽然对CS全然不知,但也一点都不妨碍对它的神奇感到向往.再 ...
- WeakHashMap源码解读
1. 简介 本文基于JDK8u111的源码分析WeakHashMap的一些主要方法的实现. 2. 数据结构 就数据结构来说WeakHashMap与HashMap原理差不多,都是拉链法来解决哈希冲突. ...
- Java面试——微服务
1.什么是微服务? 就目前而言,对于微服务业界并没有一个统一的,标准的定义. 但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立 ...
- SHELL-收集Oracle已应用的PSU信息
1. 命令收集版本信息 # 创建数据收集脚本文件 OPER_FILE=${EXECUTE_ID}_oper.sh if [[ "${OPER_USER}" = "${US ...