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
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:模块开发与架构解析》这本书,这里只作简单介绍;html
一、post-readnginx
读取请求内容阶段,nginx读取并解析完请求头以后就当即开始运行;git
二、server-rewritegithub
server请求地址重写阶段;缓存
三、find-configbash
配置查找阶段,用来完成当前请求与location配重块之间的配对工做;架构
四、rewrite并发
location请求地址重写阶段,当ngx_rewrite指令用于location中,就是再这个阶段运行的;运维
五、post-rewrite异步
请求地址重写提交阶段,当nginx完成rewrite阶段所要求的内部跳转动做,若是rewrite阶段有这个要求的话;
六、preaccess
访问权限检查准备阶段,ngx_limit_req和ngx_limit_zone在这个阶段运行,ngx_limit_req能够控制请求的访问频率,ngx_limit_zone能够控制访问的并发度;
七、access
权限检查阶段,ngx_access在这个阶段运行,配置指令可能是执行访问控制相关的任务,如检查用户的访问权限,检查用户的来源IP是否合法;
八、post-access
访问权限检查提交阶段;
九、try-files
配置项try_files处理阶段;
十、content
内容产生阶段,是全部请求处理阶段中最为重要的阶段,由于这个阶段的指令一般是用来生成HTTP响应内容的;
十一、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
http://zivn.me/2013/08/05/something-about-openresty/
wiki:https://www.openresty.com.cn/nginx-lua-module-zh-wiki.html