OpenResty是一个基于Nginx可伸缩的Web平台,集成了很多第三方模块(Lua),可以实现10K~1000K的并发链接响应的高性能Web应用
请求非及时性资源实例
配置一个请求缓存(高并发请求资源)
- 用户通过链接访问Nginx(NginX-OpenResty),将需要请求指定资源的会话拦截,并从OpenResty Cache(Nginx-Cache)中请求资源,如果查询不到则继续下一步,查询到了就直接返回资源
- 通过OpenResty集成的Lua脚本配置,请求本地Redis缓存,如果查询不到则继续下一步,查询到了就写入Nginx-Cache并返回资源
- 如果以上都没有查询到数据,那么就会到主数据库查询数据,查询完毕后将数据同步到Redis缓存中,并返回
配置
- 在Nginx.conf配置NginX拦截处理
- 编写Lua接受请求后处理脚本
- 定义Nginx缓存模块大小
ps:每次修改配置文件都需要重启Nginx服务
Nginx限流
方式:
- 速率限流
- 并发连接数限流
速率限流
使用漏桶算法实现,在大并发量请求来临之时,将所有水(请求)放入一个桶中(固定最大请求并发量),然后在桶下方戳一个小洞,让它一滴一滴的流出来(控制并发量传输速率),如果水太多了,就会溢出(拒绝请求)
(令牌桶算法,可以实现请求优先级,常见用于网关限流)
Nginx速率限流配置
Nginx设置
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;
表示每一秒钟处理最多两个请求,处理不过来就会拒绝(除非由burst参数,也就是缓冲区声明)
虚拟机设置
limit_req zone=contentRateLimit burst=4 nodelay;
表示缓冲队列大小为四个请求,请求数大于4就拒绝,单独使用意义不大,需要和速率一起搭配使用
limit_req zone=contentRateLimit burst=4 nodelay;
表示并行处理,加了这个参数就不需要管rate了,实现真正意义上的并发
Nginx并发量限流配置
根据访问端口限流
Nginx设置
limit_conn_zone $binary_remote_addr zone=addr:10m;
表示根据IP限流,存储内存大小为10M,连接名为addr
虚拟机设置
limit_conn addr 2;
表示每秒只能接收2个请求
proxy_pass http://192.168.211.1:18081;
表示访问这个地址被拦截并被转发至指定地址
根据个人请求限流
Nginx设置
limit_conn_zone $binary_remote_addr zone=perip:10m;
表示根据个人请求perip限流
limit_conn_zone $server_name zone=perserver:10M;
表示根据整个location对应的请求并发容量配置
虚拟机设置
limit_conn perip 3;
限制同Ip并发只能访问3次
limit_conn perserver 5;
限制总的访问并发量只能最多五个