微服务架构在项目中的应用越来越多,我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用.但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,举个例子.    在一个电商系统中,查看一个商品详情页,这个商品详情页包含商品的标题,价格…
openresty开发系列11--openresty的api入门 1)ngx_lua模块的hello world编辑nginx下conf配置文件nginx.conf# vi nginx.conf在server模块加上location /helloworld {    default_type text/html;    content_by_lua 'ngx.say("hello world")';} 检查配置文件是否正确# /usr/local/openresty/nginx/sbi…
openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏多 Nginx设计为一个主进程多个工作进程的工作模式,每个进程是单线程来处理多个连接,而且每个工作进程采用了非阻塞I/O来处理多个连接,从而减少了线程上下文切换,从而实现了公认的高性能.高并发;因此在生成环境中会通过把CPU绑定给Nginx工作进程从而提升其性能;另外因为单线程工作模式的特点,内存占…
openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容.本方案在CentOS7.6环境下基于高性能的Openresty1.13.6.1来实现. 方案介绍 要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,但使用在线服务查询潜在存在性能问题,同时通过lua来访问外部服务增加额外的代码…
openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 二)设计方案实现 IP 黑名单的功能有很多途径:1.在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求:2.在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单:3.在应用层面,在请求服务之前检查一遍客户端 IP…
openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次在openresty中,可以找到:set_by_lua,rewrite_by_lua,access_by_lua,content_by_lua等方法.那么访问控制应该是,access阶段.我们用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的需求. 二)设计方案 我们用redis的key表示…
openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-script-str>语境:http,server,location,location if阶段:output-header-filter一般用来设置cookie和headers,在该阶段不能使用如下几个API:1.output API(ngx.say和ngx.send_headers)2.control AP…
openresty开发系列34--openresty执行流程之4访问阶段 访问阶段 用途:访问权限限制 返回403 nginx:allow 允许,deny 禁止 allow ip:deny ip: 涉及到的网关,有很多的业务 都是在access阶段处理的,有复杂的访问权限控制nginx:allow deny 功能太弱 一)access_by_lua语法:access_by_lua <lua-script-str>语境:http,server,location,location if阶段:acc…
openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:if (condition){...}默认值:无作用域:server,location对给定的条件condition进行判断.如果为真,大括号内的指令将被执行. 上面的if和(之间需要留空格,否则会报错. 1)条件可以为一个变量 如果一个变量名进行条件判断,空字符串'' 或 字符串为'0',都表示为假…
openresty开发系列33--openresty执行流程之2重写赋值阶段 一)重写赋值阶段 1)set_by_lua 语法:set_by_lua $res <lua-script-str> [$arg1 $arg2 …]语境:server.server if.location.location if阶段:rewrite 设置nginx变量,我们用的set指令即使配合if指令也很难实现负责的赋值逻辑: 传入参数到指定的lua脚本代码中执行,并得到返回值到res中.<lua-script…