不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-03-31 10:06  分类:OpenResty_Lua 

当在 location 区块中使用 if 指令的时候会有一些问题, 在某些情况下它并不按照你的预期运行而是做一些完全不同的事情。而在另一些情况下他甚至会出现段错误。一般来说避免使用 if 指令是个好主意。

在 location 区块里 if 指令下唯一 100% 安全的指令应该只有:

return …; rewrite … last;

作者:php-note.com  发布于:2019-03-31 10:00  分类:OpenResty_Lua 

语法规则

location [=|~|~*|^~]  /uri/  { … }

 

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default
作者:php-note.com  发布于:2019-03-31 09:51  分类:OpenResty_Lua 

为什么选择 Nginx?因为它具有以下特点:

1、处理响应请求很快
2、高并发连接
3、低的内存消耗

作者:php-note.com  发布于:2019-03-31 09:44  分类:OpenResty_Lua 

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 为俄罗斯著名的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

作者:php-note.com  发布于:2019-03-31 09:39  分类:OpenResty_Lua 

自从 OpenResty 1.5.8.1 版本之后,默认捆绑的 Lua 解释器就被替换成了 LuaJIT,而不再是标准 Lua。单从名字上,我们就可以直接看到这个新的解释器多了一个 JIT,接下来我们就一起来聊聊 JIT。

作者:php-note.com  发布于:2019-03-31 09:30  分类:OpenResty_Lua 

FFI 库,是 LuaJIT 中最重要的一个扩展库。它允许从纯 Lua 代码调用外部 C 函数,使用 C 数据结构。有了它,就不用再像 Lua 标准 math 库一样,编写 Lua 扩展库。把开发者从开发 Lua 扩展 C 库(语言/功能绑定库)的繁重工作中释放出来。学习完本小节对开发纯 ffi 的库是有帮助的,像 lru-resty-lrucache 中的 pureffi.lua,这个纯 ffi 库非常高效地完成了 lru 缓存策略。

作者:php-note.com  发布于:2019-03-31 09:22  分类:OpenResty_Lua 

对于比较底层的模块,内部使用到的非本地函数,都需要 local 本地化,这样做的好处:

  • 避免命名冲突:防止外部是 require(...) 的方法调用造成全局变量污染
  • 访问局部变量的速度比全局变量更快、更快、更快(重要事情说三遍)
作者:php-note.com  发布于:2019-03-31 09:19  分类:OpenResty_Lua 

冒号操作会带入一个 self 参数,用来代表 自己。而点号操作,只是 内容 的展开。

作者:php-note.com  发布于:2019-03-31 09:09  分类:OpenResty_Lua 

在函数定义之前使用函数相当于在变量赋值之前使用变量,Lua 世界对于没有赋值的变量,默认都是 nil,所以这里也就产生了一个 nil 的错误。

作者:php-note.com  发布于:2019-03-31 00:43  分类:OpenResty_Lua 

旧式的模块定义方式是通过 module("filename"[,package.seeall])* 来显式声明一个包,现在官方不推荐再使用这种方式。这种方式将会返回一个由 filename 模块函数组成的 table,并且还会定义一个包含该 table 的全局变量。