其中, init_by_lua 只会在 Master 进程被创建时执行,init_worker_by_lua 只会在每个 Worker 进程被创建时执行。其他的 *_by_lua 指令则是由终端请求触发,会被反复执行。 所以在 init_by_lua 阶段,我们可以预先加载 Lua 模块和公共的只读数据,这样可以利用操作系统的 COW(copy on write)特性,来节省一些内存。
init_worker_by_lua_file <lua-file-path> 1. set_by_lua 用法 执行指定脚本和输入的值返回一个结果 语法 set_by_lua $res <lua-script-str> [$arg1 $arg2...] 1. 示例 location /foo { set $diff ''; # we have to predefine the $diff variable here set_by_lua $sum ' local a = 32 ...
阶段:starting-worker 在每个nginx worker进程启动时调用指定的lua代码。 用于启动一些定时任务,比如心跳检查,定时拉取服务器配置等等;此处的任务是跟Worker进程数量有关系的, 比如有2个Worker进程那么就会启动两个完全一样的定时任务。 a、nginx.conf配置文件中的http部分添加如下代码 init_worker_by_lua_file /usr/l...
而且为了保证数据有效性,需要定期将redis中的数据拉取到共享内存中;那么就需要在init_worker_by_lua阶段添加定时器。 修改nginx_new.conf文件内容: worker_processes 2; events { worker_connections 10240; } ### # 以下为nginx配置块 ### # http 协议 http { # 创建共享内存 lua_shared_dict bklist 1m; ...
OpenResty 也有 11 个 *_by_lua指令,它们和 NGINX 阶段的关系如下图所示(图片来 自 lua-nginx-module 文档): 其中, init_by_lua 只会在 Master 进程被创建时执行,init_worker_by_lua 只会在每个 Worker 进程被创建时执行。其他的 *_by_lua 指令则是由终端请求触发,会被反复执行。
Lua中有比较多常用且实用的指令,接下来将介绍常用的access_by_lua_xxx、content_by_lua_xxx、log_by_lua_xxx、lua_shared_dict、lua_package_path、lua_code_cache、init_worker_by_lua_file指令。 access_by_lua_xxx access_by_lua支持将要执行的lua代码封装到文件或代码块中,分别对应着access_by_lua_file和...
init_worker_by_lua_file starting-worker http 每个Nginx Worker进程启动时调用的计时器,如果Master进程不允许则只会在init_by_lua之后调用; 通常用于定时拉取配置/数据,或者后端服务的健康检查 set_by_lua set_by_lua_file rewrite server,server if,location,location if ...
Hi: when using openresty, i need to do some crontab job, such as sync config, at first, I use ngx.timer.at() to do such job, but ngx.timer.at may cause some slow request then I tried to use init_worker_by_lua_file, all the workers will t...
access_by_lua_file /path/to/access.lua; content_by_lua_file /path/to/content.lua; } ... } OpenResty 变量的共享范围 全局变量 在OpenResty 中,只有在init_by_lua*和init_worker_by_lua*阶段才能定义真正的全局变量。因为在其他阶段,OpenResty 会设置一个隔离的全局变量表,以免在处理过程中污染了其他...
worker进程:与master进程命令一一对应 TERM,INT:表示立刻停止nginx进程 QUIT:表示优雅停止nginx进程 USR1:表示重新打开日志文件 WINCH:专门针对热部署使用 Nginx命令行,相当于直接向master进程发送命令 reload:HUP reopen:USR1 stop:TERM quit:QUIT openresty入门 ...