openresty

OpenResty--【ngx.location.capture】

主宰稳场 提交于 2020-02-26 22:02:45
介绍 描述 在openResty中,ngx.location.capture_multi是一个非常强大的功能, 其可以达到极大的减少浏览器的http连接数量,并且可以异步并发的访问后台 Java/PHP/Python 等等接口。 可以应用于并发多个相互之间没有依赖的请求。在现代的应用架构中经常使用微服务,提供低粒度的接口;但在客户端(例如:app、网页服务)经常需要请求多个微服务接口,才能完整显示页面内容。 差异 介绍一下下面这几个应用之间的差别; ngx.exec:nginx跳转;跳转到其他的location中执行。但仅限nginx内部的location。 ngx.redirect:和nginx.exec相似,但支持外部跳转。 ngx.location.capture_multi:并发请求;但仅限nginx内部的location。 http包中multi方法:概念上与ngx.location.capture_multi相似,但支持外部接口。 实例 官方 redis sample### http://openresty.org/cn/dynamic-routing-based-on-redis.html 商品介绍 https://blog.csdn.net/u010074988/article/details/90665529 来源: oschina 链接: https://my

OpenResty从入门到开发一个网关服务(使用etcd作为注册中心)

北城余情 提交于 2020-02-25 19:39:29
简介 OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。 ngx_openresty 目前有两大应用目标: 通用目的的 web 应用服务器。在这个目标下,现有的 web 应用技术都可以算是和 OpenResty 或多或少有些类似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括内存使用和 CPU 效率)算是最大的卖点之一。 Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。有些类似的是 NetScaler。其优势在于 Lua 编程带来的巨大灵活性。 引用自:OpenResty最佳实践 入门教程 OpenResty 最佳实践 跟我学OpenResty(Nginx+Lua)开发 目前已经有大佬写了很完整的教程,没有必要重复造轮子了,我觉得这两个是最好的。更多openresty相关资料可以看这里https:/

OpenResty 扩展库之(一)——lua-resty-shell 库

有些话、适合烂在心里 提交于 2020-02-23 05:03:10
介绍   当您需要执行子进程(或shell命令)时,这是一个打算与OpenResty应用程序一起使用的小型库。 它类似于os.execute和io.popen,除了它是完全非阻塞的,因此即使对于需要很长时间完成的命令也是安全的。   该库依赖于您需要在Web服务器(sockproc)上运行的守护程序组件。 基本思想是,shell库连接到sockproc守护程序的unix域套接字,发送命令以及子程序所期望的任何输入数据,然后读取退出代码,输出流数据和错误流数据 子进程。 因为我们使用由lua-nginx-module提供的co-socket API,所以nginx工作者从不被阻止。 一、安装 sockproc 下载地址: https://github.com/juce/sockproc 具体安装步骤: git clone https://github.com/juce/sockproc.git cd sockproc/ -- 通过gcc 编译生成一个可执行的文件 sockproc gcc -o sockproc ./sockproc.c tinywan@tinywan:~/sockproc$ ls LICENSE Makefile README.md sockproc sockproc.c tests.sh ./sockproc /tmp/shell.sock chmod 0666

二、OpenResty的应用编写hello lua和关闭缓存

╄→гoц情女王★ 提交于 2020-02-19 04:40:42
一、编写hello lua 1、停止nginx进程 打开/usr/local/openresty/nginx/conf/nginx.conf 在其中加入 2、执行 nginx -s reload 该命令用于配置文件被修改后时使用 这时候会报错 nginx: [error] open() "/usr/local/openresty/nginx/logs/nginx.pid" failed (2: No such file or directory) 输入下面代码解决: /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf 此时nginx会自动启动,不用再start了 该方法是在Nginx的配置文件的嵌入Lua代码 当代码逻辑复杂时就不适合在配置文件中写了,因此可以引用第三方脚本 二、引入lua代码文件编写hello lua 1、在nginx.conf中编写content_by_lua_file 2、创建lua文件夹,编写hello.lua mkdir lua vi hello.lua 3、查看结果 curl 127.0.0.1/hello 三、lua_code_cache 在上面的脚本中,修改了内容,则再次访问时还是原来的结果,这是因为其中有缓存,因此我们要将lua

OpenResty+缓存穿透基本介绍

一个人想着一个人 提交于 2020-02-14 11:05:28
OpenResty 1.lua表达式 2.Nginx的安装 3.OpenResty 因为咱们已经意识到了Nginx 很强大,咱们也想使用它来进行逻辑上的开发,但是由于Nginx 是C语言 写的,所以Java开发工程师很难在上边进行开发,所以咱们有了OpenResty ,OpenResty 一套底层封装了Nginx 和Lua 表达式的这么一个技术或者叫做环境,有了它之后,咱们就可以通过Lua 来进行web 的开发 4.缓存预热: 意思就是在项目启动时,就将数据库中的数据加载到缓存中,有了缓存之后,就可以避免项目启动时 无缓存从而请求直击数据库的这种情况发生 5.缓存穿透 这个要查询的数据 在数据库中和缓存中都不存在的查询 初级版: 5.1 判断,如果是负数,那么直接拦截 5.2 如果是查询缓存和数据库都没有,可以将这些数据这个id 存入到缓存中,下次过来访问时,需要有相同的id,此时直接就可以缓存中国返回 以上两种方案:都无法解决随机id 访问这种操作 网关处:做了一个白名单-> 将数据库中的所有数据的id 存入到集合中 当要进行访问时,去判断要查询的id ,是否在这个白名单中,如果在,放他去查询,如果不在,直接返回 问题:如果商品数据量过大,此时呢,这个集合就会很大 采用布隆过滤器来解决 他的思路非常类似于map对key的处理 放 拿 来源: https://www.cnblogs

Linux安装OpenResty

烈酒焚心 提交于 2020-02-10 15:35:12
简介   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等都进行一致的高性能响应。   公司目前有这种通过lua合并接口的需求,来达到减少请求数量的目标,在nginx作为反向代理接收到请求时根据请求路径将原来多个接口的请求合并到一个json返回,减少http请求数,提高请求效率增加并发量。 安装(linux) 1. 安装依赖 yum install pcre-devel openssl-devel gcc curl postgresql-devel 2. 下载 wget

openresty使用redis作本地缓存

我怕爱的太早我们不能终老 提交于 2020-02-10 15:32:30
一,为什么要使用redis作本地缓存? 当使用openresty作为web服务器时,我们更看重是的它可以通过lua编程的扩展能力,就openresty而言,它可以实现的功能非常多, 提高响应速度是web服务中非常重要的功能, 使用缓存通常会有三层: 本地缓存:存在于本地机器上,直接通过nginx访问,避免网络io; redis cluster:存储更多的供lua访问的数据,也是通过nginx访问直接返回,相比前一层缓存,增加了网络io,但仍然避免了对业务系统的访问; 业务缓存:供运行在tomcat/php-fpm/go http中内的业务代码访问。 可以比较得到本地缓存是响应速度最快的,通常可以在10ms内对请求进行响应。 我们看到的很多经过优化的BAT等大厂的站点都能在极短时间内响应请求,就是经过了层层优化的结果。 二,这里会提供一个例子:使用redis做商品详情页的cache: 流程:当用户访问时, 先从redis中获取cache内容, 如果redis中不存在此value,则会改为访问后端业务系统获取cache 说明:在生产环境中,为方便更新,通常会采用redis的主从架构, 每台业务nginx上所配备的redis的数据能得到实时更新 说明:架构森林是一个专注架构的博客,对应的源码可以访问这里获取 https://github.com/liuhongdi/ 二

centos8上安装openresty

丶灬走出姿态 提交于 2020-02-10 15:24:56
一,openresty的官网地址: http://openresty.org/ 说明:说一下openresty的安装方式: 从openresty的安装目录下,可以看到openresty编译安装了自己作了魔改的几个库: luajit,nginx,openssl,pcre,zlib [root@localhost openresty]# pwd /usr/local/openresty [root@localhost openresty]# ls bin COPYRIGHT luajit lualib nginx openssl pcre site zlib 如果编译源码方式安装,可能会有一些编译参数与二进制版不一致导致openresty的安装/运行中出现bug, 所以除非openresty内置nginx的编译参数不满足需求,否则强烈推荐采用官方打好的二进制包方式安装, 针对centos平台,当然是使用yum 说明:架构森林是一个专注架构的博客,对应的源码可以访问这里获取 https://github.com/liuhongdi/ 二,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 三,安装yum-utils [root@localhost

OpenResty学习指南(二)

霸气de小男生 提交于 2020-02-08 18:53:01
我的个人博客: https://www.luozhiyun.com/ 数据结构table table并没有区分开数组、哈希、集合等概念,而是揉在了一起。 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 table 库函数 获取元素个数 对于序列,用table.getn 或者一元操作符 # ,就可以正确返回元素的个数。 $ resty -e 'local t = { 1, 2, 3 } print(table.getn(t)) ' # 返回3 不是序列的 table,就无法返回正确的值。 $ resty -e 'local t = { 1, a = 2 } print(#t) ' #返回1 所以不要使用函数 table.getn 和一元操作符 # 。 我们可以使用 table.nkeys 来获取 table 长度,返回的是 table 的元素个数

openresty获取nginx请求头信息

此生再无相见时 提交于 2020-02-07 18:18:08
vi test.lua:在nginx.conf配置文件中已经指定了lua脚本了 获取到请求头信息可以帮助我们做什么呢? ①比如对同一请求url,实际上也可以认定为是同一请求用户,可以限定其单位时间内的请求次数,防止过高频率访问,阻断恶意攻击。 ②也可以在请求头信息中加上token信息,对请求进行鉴权。 ③进行url定向转发,比如将1-100的id转发到A服务器,将101-200的id转发到B服务器等。因为location只能拦截到/lua,?后面的请求参数这一层是拦截不到的。 ④对某一地域进行拦截。 来源: CSDN 作者: 学亮编程手记 链接: https://blog.csdn.net/a772304419/article/details/104115457