ngx_lua的代码缓存

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

Nginx的文件分片-slice模块

Nginx的slice模块可以将一个请求分解成多个子请求,每个子请求返回响应内容的一个片段,让大文件的缓存更有效。 HTTP Range请求 HTTP客户端下载文件时,如果发生了网络中断,必须重新像服务器发起HTTP请求,这时客户端已经有文件的一部分,只需要请求剩余的内容,而不需要传输整个文件,Range请求就用来处理这种问题。 如果HTTP请求的头部有Range字段,如下面所示 Range: bytes=1024-2047 表示客户端请求文件的第1025到第2048个字节,这时服务器只会响应文件的这部分内容,响应的状态码为206, ...

LuaJIT虚拟机-函数与原型

Lua中的函数(或Function),其实应该是闭包(Closure),闭包可以认为是函数+外部变量,这里为了简单没有作区分,函数原型(或Proto)可以认为是函数的静态表示。 函数与函数原型的关系有点类似系统中进程与程序,一个程序被多次启动会创建多个进程。一个Proto可以被此加载创建多个函数。Proto是静态的,Function是动态的,在Lua中调用一个函数,总是先依照Proto创建一个函数对象,再执行这个函数对象。 函数原型 Proto ...

LuaJIT的变量实现-TValue

Lua是动态类型的编程语言,变量的值可以是数值、字符串、table等所有支持的数据类型。在Lua虚拟机中每个变量都是用一个TValue结构体表示。LuaJIT出于效率的考虑重新组织了TValue结构体。 lua-5.1中的TValue结构 lua-5.1中TValue的结构定义在lobject.h中,如下所示 /* ** Union of all Lua values */ typedef union { GCObject ...

openssl AES 加密/解密

AES算法 AES进行加/解密需要考虑下面三个设置。 密钥 使用的密钥长度为128/192/256位,这里以128位为例 初始向量 初始向量位128位 填充 AES以128位,即16字节为单位进行操作,如果明文长度不是16的整数倍就需要进行填充,openssl默认以PKCS#7方式进行填充。PKCS#7填充时将明文长度扩充为16的整数倍,每一个填充的字节值为填充的长度。 例如: ...