openresty(lua-API-正则表达式)
摘自:http://www.daileinote.com/computer/openresty/10 ngx_lua 在表 ngx.re 里提供了5个正则表达式相关函数,它们的底层实现为 nginx 的 PCRE 库,并且支持 PCRE-JIT,速度非常快,完全可以代替 Lua 标准库的字符串匹配函数。 ngx.re.match1syntax: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?) 返回第一个匹配,没匹配或报错返回 nil。 捕获的结果存在 captures 里,captures[0] 代表全部,captures[1] 代表第一个括号的捕获值,没捕获到的返回 nil。 1234567891011local m, err = ngx.re.match("hello, 1234", "[0-9]+")if m then -- m[0] == "1234"else if err then --出错 ...
openresty(lua-API-轻量级线程-ngx.thread)
摘自:http://www.daileinote.com/computer/openresty/14 OpenResty ngx_lua 模块的 ngx.thread(轻量级线程) 可以实现并行的访问上游服务,其内部实现原理就是基于 Lua 的协程,只是由 ngx_lua 帮忙调度,隐藏了一些细节处理。 由 rewrite_by_lua、access_by_lua、content_by_lua 等运行的 Lua 代码本身就是协程,我们可以称之为入口点协程或者主协程,然后再由该协程调用 ngx.thread.spawn 再生成协程,可以称之为子协程或者用户协程。 默认情况下当前的handler(比如由 content_by_lua* 的内容阶段)是不会终止的,除非发生以下3中情况中的一种: 1.当主协程和所有用户协程都终止2.当主协程或者子协程中的其中一个调用了 ngx.exit、ngx.exec、ngx.redirect、ngx.req.set_uri(uri, true)其中一种。3.主协程发生错误终止 注意:其中一个子协程发生 Lua 错误并不会影响到其他子协程运行。 由于 ...
openresty-基础及运行机制
摘自:http://www.daileinote.com/computer/openresty/04 局部模块在同一个worker中是共享的在同一个 worker 中,使用 local 修饰的模块代码和数据只会被加载一次,该模块下的数据在同一个 worker 下的所有请求共享,但是全局的却不是(也就是不加 local 修饰),那是由于一个请求一个协程的设计原则。 123456location /lua { content_by_lua_block { local mydata = require "mydata" ngx.say(mydata.get_age("dog")) }} 当第一次请求 /lua 时,当前 worker 会加载缓存该模块,接下来所有到 /lua 的请求都会使用预先加载的数据,这也是 openresty 高性能的原因所在。 一定要注意,数据在同一个 worker 下共享,换句话说,启动 nginx 如果有多个 work...
安装openresty
OpenResty® 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点: 具备Nginx的完整功能 基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块 允许使用Lua自定义业务逻辑、自定义库 官方网站: https://openresty.org/cn/ 安装OpenResty1.安装首先你的Linux虚拟机必须联网 1)安装开发库首先要安装OpenResty的依赖开发库,执行命令: 1yum install -y pcre-devel openssl-devel gcc --skip-broken 2)安装OpenResty仓库你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum check-update 命令)。运行下面的命令就可以添加我们的仓库: 1yum-config-manager --add-repo https://openresty.org/package/centos...
网关orange
github地址: https://github.com/orlabs/orange 官网: http://orange.sumory.com/ 简介 Orange是一个基于OpenResty的API Gateway,提供API及自定义规则的监控和管理,如访问统计、流量切分、API重定向等功能。 特点: 提供了一套默认的Dashboard用于动态管理各种功能和配置 提供了API接口用于实现第三方服务 根据规范编写自定义插件扩展Orange功能 安装及使用(最新可用版0.8.1)安装先安装lor: https://github.com/orlabs/orange/blob/master/README_zh.md#2-%E5%AE%89%E8%A3%85-lor-framework 再进行依赖安装: https://github.com/orlabs/orange/blob/v0.8.1/docs/install-dependencies.md 最后,查看orange的安装和使用: https://github.com/orlabs/orange/blob/v0.8.1/...
CentOS7下使用yum安装Nginx
下载对应当前系统版本的nginx包(package)安装 openssl 、 zlib 、 gcc 、pcre依赖1yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel 安装 pcre 依赖:1234wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gztar -xvf pcre-8.45.tar.gz && cd pcre-8.45./configuremake && make install 下载nginx的rpm包:1wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 建立nginx的yum仓库1rpm -ivh nginx-release-centos-7-0.el7.ngx.noar...
k8s环境下,nginx做websocket负载的方案梳理
websocket server websocket server demo:https://github.com/mrniko/netty-socketio-demo Dockerfile 123456FROM maven:3.8.5-openjdk-17 as buildWORKDIR /user/src/appCOPY . .RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && mvn clean package -DskipTestsCMD mvn exec:java -f pom.xml 部署(保证pod可以被独立访问)statefulset方式 使用statefulset+headless service的方式对pod进行独立访问 DNS: pod名称-编号.headless名称.namespace.svc.cluster.local 123456789101112131415161718192021222324252627282930313233343536...
nginx-sticky安装及负载均衡使用
转自: https://blog.csdn.net/yyysylvia/article/details/80198021 sticky的工作原理Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 后端服务器处理完请求,将响应数据返回给nginx。 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值 客户端接收请求,并保存带route的cookie。 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。 nginx+sticky安装nginx安装最好采用编译安装的方式,这样可以很方便的找到nginx的安装位置,方便添加nginx-sticky模块。如果之前已经编译安装过nginx,...
负载均衡配置和算法原理
转自:https://tinychen.com/20200319-nginx-03-load-balancing/ nginx的负载均衡配置,包括http、tcp和udp负载均衡,以及Round robin、Least connections、Least time(Nginx Plus专属)、Generic hash、Random、IP hash(HTTP模块专属)的原理分析。 1、http负载均衡我们先来看一小段配置文件 12345678910upstream backend { server 10.0.0.1:80 weight=1; server nginx.example.com:80 weight=2; }server { location / { proxy_pass http://backend; }} 这是一个简单的使用upstream模块对http服务进行指定权重的负载均衡的配置文件,一般存放在nginx目录下的conf.d文件夹中。 server可以使用Unix socket、...
Nginx反向代理中proxy_set_header参数说明
转自: https://www.cnblogs.com/kevingrace/p/8269955.html Nginx proxy_set_header:**即允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。**在没有定义proxy_set_header时会继承之前定义的值。默认情况下,只有两个字段被重定义: 12proxy_set_header Host $proxy_host;proxy_set_header Connection close; 如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, 和 “If-Range” 将不会被代理服务器传递。一个不会变化的“Host”头请求字段可通过如下方式被传递: 1proxy_set_header Host $http_host; 然后,当字段不在请求头中就无法传递了,在这种情况下,可通过设置Host变量,将需传递值赋给Host变量 1proxy...
