openresty函数说明

安装luajit

wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz
tar -xvf LuaJIT-2.1.0-beta1.tar.gz
cd LuaJIT-2.1.0-beta1
make && make install

安装openresty

wget https://openresty.org/download/ngx_openresty-1.7.10.1.tar.gz
tar -zxxvf ngx_openresty-1.7.10.1.tar.gz 
cd ngx_openresty-1.7.10.1
./configure --prefix=/usr/local/openresty
gmake&&gmake install

平滑升级

wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar -zxvf openresty-1.13.6.1.tar.gz
cd openresty-1.13.6.1
./configure --prefix=/usr/local/openresty
make
mv /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.old
cp build/nginx-1.13.6/objs/nginx /usr/local/openresty/nginx/sbin/nginx
kill -USR2 `cat /home/lua/nginx.pid`
kill -QUIT `cat /home/lua/nginx.pid.oldbin`
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -v
/usr/local/openresty/nginx/sbin/nginx -s reload

nginx执行过程

nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读《深入理解nginx:模块开发与架构解析》这本书,这里只做简单介绍;

1、post-read

读取请求内容阶段,nginx读取并解析完请求头之后就立即开始运行;

2、server-rewrite

server请求地址重写阶段;

3、find-config

配置查找阶段,用来完成当前请求与location配重块之间的配对工作;

4、rewrite

location请求地址重写阶段,当ngx_rewrite指令用于location中,就是再这个阶段运行的;

5、post-rewrite

请求地址重写提交阶段,当nginx完成rewrite阶段所要求的内部跳转动作,如果rewrite阶段有这个要求的话;

6、preaccess

访问权限检查准备阶段,ngx_limit_req和ngx_limit_zone在这个阶段运行,ngx_limit_req可以控制请求的访问频率,ngx_limit_zone可以控制访问的并发度;

7、access

权限检查阶段,ngx_access在这个阶段运行,配置指令多是执行访问控制相关的任务,如检查用户的访问权限,检查用户的来源IP是否合法;

8、post-access

访问权限检查提交阶段;

9、try-files

配置项try_files处理阶段;

10、content

内容产生阶段,是所有请求处理阶段中最为重要的阶段,因为这个阶段的指令通常是用来生成HTTP响应内容的;

11、log

日志模块处理阶段;

 

常用函数或语句

# 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径):
 lua_package_path '/foo/bar/?.lua;/blah/?.lua;;';

 # 设置 C 编写的 Lua 扩展模块的搜寻路径(也可以用 ';;'):
 lua_package_cpath '/bar/baz/?.so;/blah/blah/?.so;;';

access_by_lua_file lua脚本文件; 准入阶段完成参数验证

content_by_lua_block{书写lua脚本区域}; 内容产生阶段的lua脚本

client_body_in_file_only on;强制请求body到临时文件中

lua_code_cache off;//lua脚本缓存关闭   生产环境务必要设置成on

internal;标记只能内部使用,即由ngx.location.capture或ngx.location.capture_multi调用

ngx.req请求内容

ngx.ctx 用于保存每个请求的上下文,数据共享;;;注意开销较大(本人未验证https://moonbingbing.gitbooks.io/openresty-best-practices/content/openresty/share_var.html)

ngx.var.request_method请求方法

ngx.var.remote_addr客户端ip

nginx.log(日志级别, 参数。。。)生成日志

ngx.STDERR     -- 标准输出
 ngx.EMERG      -- 紧急报错
 ngx.ALERT      -- 报警
 ngx.CRIT       -- 严重,系统故障,触发运维告警系统
 ngx.ERR        -- 错误,业务不可恢复性错误
 ngx.WARN       -- 告警,业务中可忽略错误
 ngx.NOTICE     -- 提醒,业务比较重要信息
 ngx.INFO       -- 信息,业务琐碎日志信息,包含不同情况判断等
 ngx.DEBUG      -- 调试

ngx.now()当前时间戳

ngx.say()异步输出 比print会多输出一个\n

ngx.print()异步输出

ngx.flush()显式的向客户端输出响应

ngx.sleep(s)暂停S秒

ngx.req.get_headers()获取请求头信息

ngx.req.get_body_file()获取上传的文件

ngx.req.get_uri_args()获取uri参数

ngx.req.read_body()读取body

ngx.req.get_body_data()获取符合http协议的请求体,不是普通的字符串。

需要指定lua_need_request_body on;指令

ngx.req.get_body_file()获取请求body的临时文件内容

ngx.req.get_post_args()获取post请求参数,一定要先执行ngx.req.read_body()

ngx.req.start_time()请求开始时间

ngx.encode_agrs()对请求参数进行转义即其他语言的urlencode

ngx.location.capture(location, {参数体})调用其他location  一个同步非阻塞的NGINX子请求uri

ngx.location.capture_multi({

{location1,{参数体1}},

{location2,{参数体2}},

})并行调用两个location

ngx.exec() 主要实现的是内部的重定向,等价于rewrite指令 ; 该方法不会主动返回,因此,强烈建议在调用该方法时,最好显式加上return

nginx.redirect(url)该方法会给客户端返回一个301/302重定向,具体是301还是302取决于设定的status值,如果不指定status值,默认是返回302 .

ngx.exit()退出

 

一些坑

1.content_by_lua_block openresty 1.7.10.1不可用,视乎是在1.9.x开始支持

2.content_by_lua_file path  path如果使用相对路径是启动时-p参数指定的根路径否则默认是nginx安装路径作为根路径

3.Nginx内核规定一次可以发起的子请求的个数不能超过50个

4.只有当lua_code_cache设置为on时连接池才生效。

 

 

 

 

 

中文文档:https://github.com/iresty/nginx-lua-module-zh-wiki

OpenResty 最佳实践  

https://www.gitbook.com/book/moonbingbing/openresty-best-practices/details

关于 OpenResty 的两三事

http://zivn.me/2013/08/05/something-about-openresty/

wiki:https://www.openresty.com.cn/nginx-lua-module-zh-wiki.html

转载于:https://my.oschina.net/u/232595/blog/1588906

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值