热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx+luanginxmodule,openresty,lua基础语法笔记

1.Lua用[[]]括起来的字符不会被转义,在写正则表达式的时候很实用;例:[[^\d+.\d+$]]2.lua中"~"表
1.Lua 用[[...]]括起来的字符不会被转义,在写正则表达式的时候很实用;

例:[[^\d+.\d+$]]

2.lua 中"~="表示不等于

3.可以用 type(aa)查看变量 aa 的类型

4.lua 中 0 是真(true)

5.字符串连接符:..

7.lua 中的逻辑运算符比较特殊
例:local y = a and b or c 相当于 a?b:c

参考:https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/operator.html

8.local m,n = "aaa" 表示 m 被赋值为字符串,n 没有被赋值,是 nil

9.lua function 可以返回多个值

参考:https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/function_result.html

10.lua 中当 table 作为一个函数的参数时,就和 java 中的集合和数组一样是传引用的方式,而不是传值的方式

注:java 中都是值传递,只不过集合和数组传的是对象的地址值

11. 请求头参数修改方法:ngx.req.set_header(header_name, header_value);
请求体是 table 类型的,所以要修改请求体,可以先 ngx.req.get_body_data,修改完再 ngx.req.set_body_data

table 修改方法:table.key = newvalue 或 table[key] = newvalue

12.Nginx Http 处理流程有:init/rewrite/access/content/filter/log 等

可参考:http://tengine.taobao.org/book/chapter_12.html(多阶段处理请求)

13.在 lua 里判断空字符串只能用检查长度的方式

14.正则匹配,ngx.re.match()返回的结果是一个表,里面存储了匹配的结果,如果匹配成功,
m[0]保存的是整个(匹配成功的)字符串,之后的 m[1],m[2]等保存的是匹配的子表达式
local m = ngx.re.match("abcd-123", "(.*)123$", "jo")

-- 参数 "j" 启用 JIT 编译,参数 "o" 是开启缓存必须的

15. 单行注释:--

多行注释:--[[...]]

16.print(#'openresty') --计算字符串长度,输出 9

17.这些文件 I/O 操作,在 OpenResty 的上下文中对事件循环是会产生阻塞效应。OpenResty 比较擅长的是高并发网络处理,在这个环境中,任何文件的操作,都将阻塞其他并行执行的请求。实际中的应用,在 OpenResty 项目中应尽可能让网络处理部分、文件 I/0 操作部分相互独立,不要揉和在一起。

https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/file.html

18.官方建议使用 openresty,不建议使用原生 nginx 自己集成 lua-nginx-module

原文:https://github.com/openresty/lua-nginx-module#installation

19.任何重写规则的第一部分都是一个正则表达式
可以使用括号来捕获,后续可以根据位置来将其引用,位置变量值取决于捕获正则表达式中的顺序,$1引用第一个括号中的值,$2引用第二个括号中的值,以此类推。
例:^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$
$1是两个小写字母组成的字符串,$2是由小写字母和0到9的数字组成的5个字符的字符串,$3将是个文件名,$4是png、jpg、gif中的其中一个。
参考:http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/

20.nginx lua指令及其执行顺序

Nginx+lua-nginx-module,openresty,lua基础语法 笔记

其中上图中提到的各个指令的作用:

init_by_lua*:初始化 nginx 和预加载 lua(nginx 启动和 reload 时执行)
init_worker_by_lua*:每个工作进程(worker_processes)被创建时执行,用于启动一些定时任务,
比如心跳检查,后端服务的健康检查,定时拉取服务器配置等;
ssl_certificate_by_lua*:对 https 请求的处理,即将启动下游 SSL(https)连接的 SSL 握手时执行,用例:按照每个请求设置 SSL 证书链和相应的私钥,按照 SSL 协议有选择的拒绝请求等;
set_by_lua*:设置 nginx 变量
rewrite_by_lua*:重写请求(从原生 nginx 的 rewrite 阶段进入),执行内部 URL 重写或者外部重定向,典型的如伪静态化的 URL 重写;
access_by_lua*:处理请求(和 rewrite_by_lua 可以实现相同的功能,从原生 nginx 的 access阶段进入)
content_by_lua*:执行业务逻辑并产生响应,类似于 jsp 中的 servlet
balancer_by_lua*:负载均衡
header_filter_by_lua*:处理响应头
body_filter_by_lua*:处理响应体
log_by_lua*:记录访问日志
参考:https://github.com/openresty/lua-nginx-module
http://tengine.taobao.org/book/chapter_12.html#id8
http://jinnianshilongnian.iteye.com/blog/2186448

21.http请求报文

Nginx+lua-nginx-module,openresty,lua基础语法 笔记

22.HTTP响应报文

Nginx+lua-nginx-module,openresty,lua基础语法 笔记

23.附openresty的Github地址https://github.com/openresty


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
陈怡伶翰纬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有