热门标签 | 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


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了关于smarty自定义缓存名的解决思路,通过放弃生成缓存,直接生成html的静态页面来提高速度。同时提供了一个参考链接供参考。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
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社区 版权所有