OpenResty概念详细介绍,快速掌握Helloword

OpenResty概念讲解

OpenResty介绍

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

哪些公司正在用OpenResty

  • OpenResty 应用的场景非常多,比如应用在 CDN 场景,典型的用户包括又拍云、CloudFlare;
  • 京东主站的 API 网关,以及京东物流的第三方商家的网关层;
  • 12306 应用 Openesty 主要是替代 Nginx 做负载均衡和反向代理,以及火车票在出现的时候反向最大的余票的查询等都是使用 OpenResty 来实现;
  • 360 企业安全后端所有和安全相关的逻辑都是 OpenResty 实现的;
  • 腾讯游戏的广告系统里面所有的业务逻辑也是使用 OpenResty 来开发的;
  • KONG 开源出来的一整套解决方案(云原生 API gateway & Service Mash)也是基于 OpenResty 去做的。

OpenResty应用场景

其实官网 wiki 已经列了出来:

  • 在lua中混合处理不同nginx模块输出(proxy, drizzle, postgres, redis, memcached等)。
  • 在请求真正到达上游服务之前,lua中处理复杂的准入控制和安全检查。
  • 比较随意的控制应答头(通过Lua)。
  • 从外部存储中获取后端信息,并用这些信息来实时选择哪一个后端来完成业务访问。
  • 在内容handler中随意编写复杂的web应用,同步编写异步访问后端数据库和其他存储。
  • 在rewrite阶段,通过Lua完成非常复杂的处理。
  • 在Nginx子查询、location调用中,通过Lua实现高级缓存机制。
  • 对外暴露强劲的Lua语言,允许使用各种Nginx模块,自由拼合没有任何限制。该模块的脚本有充分的灵活性,同时提供的性能水平与本地C语言程序无论是在CPU时间方面以及内存占用差距非常小。所有这些都要求LuaJIT 2.x是启用的。其他脚本语言实现通常很难满足这一性能水平。

功能需求

仅仅是部分功能(更加详尽的不再一一列出)

  • 第一个方面:在开发阶段还是有大量重复性的、非功能性的模块的开发,比如:身份验证、登陆校验、流量控制、频次控制、安全等等这样的事情要做。

  • 第二个方面:就是线上运行的时候也存在大量的防刷,异常用户行为,需要进行行为控制和分析,包括防刷、秒杀、抽奖类活动的一些流量控制等干预。

API网关汇总

以下图来源于网络,能有所参考

扫描二维码关注公众号,回复: 8631670 查看本文章

环境变量

脚本 启动

创建lua目录

连接数据库

sql注入

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

乱码问题:charset utf-8;   #设置编码

http {
    server {
        #监听端口,若你的6699端口已经被占用,则需要修改
    listen 6100;
    location /initProxy {
    default_type text/html;
    charset utf-8;   #设置编码
    content_by_lua_file /opt/openresty-router/lua/lua_mysql_proxy_list.lua;
 }}

如何创建配置文件选项呢

https://blog.csdn.net/daiyudong2020/article/details/53027934

由于函数定义等价于变量赋值,我们也可以把函数名替换为某个 Lua 表的某个字段,例如

function foo.bar(a, b, c)
    -- body ...
end
local color={first="red", "blue", third="green", "yellow"}
print(color["first"])                 --> output: red
print(color[1])                       --> output: blue
print(color["third"])                 --> output: green
print(color[2])                       --> output: yellow
print(color[3])                       --> output: nil

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

点号与冒号操作符的区别

不要忘记了末尾的分号:

    ngx.say("HelloWorld")
发布了223 篇原创文章 · 获赞 145 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/zzhuan_1/article/details/93872571
今日推荐