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 如果有多个...
安装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...
网关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的安装和使用:...
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...
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:...
nginx-sticky安装及负载均衡使用
转自:...
负载均衡配置和算法原理
转自: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...
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 ...
