作者回复: ngx.ok 确实不是http状态码,它是 OpenResty 中的一个常量,值是0.
ngx.exit 的官方文档正好可以解答你的问题:
When status >= 200 (i.e., ngx.HTTP_OK and above), it will interrupt the execution of the current request and return status code to nginx.
When status == 0 (i.e., ngx.OK), it will only quit the current phase handler (or the content handler if the content_by_lua* directive is used) and continue to run later phases (if any) for the current request.
不过,里面并没有提到对于ngx.exit(ngx.ERROR)和ngx.exit(ngx.DECLINED)是如何处理的,我们可以自己来做个测试:
location /lua {
rewrite_by_lua "ngx.exit(ngx.ERROR)";
echo hello;
}
访问这个 location,可以看到 http 响应码为空,响应体也是空。并没有引入下一个执行阶段。
作者回复: 👍
作者回复: 当然可以,现在流行的 API 网关不少都是基于 OpenResty 的。JWT 的可以参考这里:https://github.com/iresty/apisix/blob/master/doc/plugins/jwt-auth-cn.md
作者回复: 是的,在 OpenResty 中 Lua 层面的内存都是自动管理的。
是否可以使用反证法,如果在结束的时候没有释放,那么内存就是一直增长。用 wrk 或者 ab 发送几百个请求,然后看看内存的占用。
作者回复: 官方 LuaJIT 并没有这个问题,OpenResty 带的 LuaJIT 确实会如此。我也不太清楚这么做的原因,可能是个 bug,你可以到https://github.com/openresty/luajit2提交 issue 询问下。
作者回复: content by lua 这个是 nginx 的指令,不能在 resty 里面调用
作者回复: 并没有特别要注意的地方