共计 9 篇文章

ngx_lua的代码缓存

Lua代码的执行一般要先将代码变成成字节码,然后再Lua虚拟机中执行字节码。lua-nginx-module将编译后的结果保存了下来,这样只需要编译一次,之后便可以直接使用,省去了编译的消耗。 Lua代码的加载 以access_by_lua为例,在Access阶段会执行指定的一段Lua代码,这是会调用ngx_http_lua_cache_loadbuffer来加载Lua代码,函数的实现如下所示 ngx_int_t ...

openresty的agent进程

最近Openresty项目增加了一个新的功能,可以在Nginx中开启一个agent进程,这个agent进程不像Nginx的worker进程那样监听服务端口然后对外提供服务,而是继承了master进程的用户权限。 出于安全的考虑,Nginx一般以root身份启动,启动后worker进程通过setuid和setgid以nobody方式运行,只有master进程保留了root身份。而agent进程拥有与master进程相同的权限,便可以实现对Nginx自身的控制,如Nginx的重载等功能。 安装 通过openresty安装 通过openresty仓库下载安装openresty 从源码编译 1 需要对Nginx源码打补丁, openresty的补丁。 2 下载lua-nginx-module, ...

ngx_lua中的lua协程

Nginx是事件驱动的异步处理方式,Lua语言本身是同步处理,但是Lua原生支持协程,给Nginx与Lua的结合提供了机会。 Nginx可以同时处理数以万计的网络连接,Lua可以同时存在很多协程,简单一点想,对每个到来的网络连接,创建一个新的协程去处理,处理完毕后释放协程。和Apache为每个连接fork一个进程处理的流程十分相似,只不过多个进程换成了多个协程。 协程相比较进程占用资源很小,协程之间的切换性能消耗非常小,几乎就相当于函数调用一样。以同步的方式写程序,实现了异步处理的效率。当然实际的编程实现并没有多进程那么简单。 在Lua中,每个协程对应有一个lua_ ...