nginx限流健康检查
#http模块内
http {include mime.types;default_type application/octet-stream;log_format main '[$time_local][$msec]$status';sendfile on;keepalive_timeout 65;proxy_cache_path /var/nginx/cache keys_zone=one:10m levels=1:2 inactive=6h max_size=1g;###限流配置limit_conn_zone $binary_remote_addr zone=perip:10m;limit_conn_log_level info;limit_conn_status 503; include conf.d/*.conf;
}
#server模块内
server {listen 80;server_name _;root /opt/openresty/nginx/html;charset utf-8;proxy_send_timeout 60;proxy_read_timeout 1800s;client_max_body_size 300M ;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #---限流配置--#location /limit {limit_conn perip 2;proxy_pass http://backend/cache;} #-----------#error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}
#http模块内
http {include mime.types;default_type application/octet-stream;log_format main '[$time_local][$msec]$status';sendfile on;keepalive_timeout 65;proxy_cache_path /var/nginx/cache keys_zone=one:10m levels=1:2 inactive=6h max_size=1g;###限流配置:每s处理一个请求limit_req_zone $binary_remote_addr zone=req:10m rate=1r/s;limit_conn_log_level info;limit_conn_status 503; include conf.d/*.conf;}
server {listen 80;server_name _;root /opt/openresty/nginx/html;charset utf-8;proxy_send_timeout 60;proxy_read_timeout 1800s;client_max_body_size 300M ;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#zone=one :设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应#burst=5:设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有5个,超过的请求会直接报503的错误然后返回。#nodelay:# 如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况。(这里的rate的单位是:r/s)# 如果没有设置,则所有请求会依次等待排队location /limit_req {limit_req zone=req burst=3 nodelay;proxy_pass http://backend/cache;} error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}
- conn:限制并发数
- count:给定时间窗口内通过固定数量的请求限制请求率
- req:请求速率限制
- traffic:可以自由组合多种限流策略
http {include mime.types;default_type application/octet-stream;log_format main '[$time_local][$msec]$status';sendfile on;keepalive_timeout 65;lua_shared_dict my_limit_conn_store 100m;limit_conn_log_level info;limit_conn_status 503; include conf.d/*.conf;
}
server {listen 80;server_name _;root /opt/openresty/nginx/html;charset utf-8;proxy_send_timeout 60;proxy_read_timeout 1800s;client_max_body_size 300M ;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#限制接口总并发数location /limit_lua_conn {access_by_lua_block {local limit_conn = require "resty.limit.conn"-- 限制一个 ip 客户端最大 1 个并发请求-- burst 设置为 0,如果超过最大的并发请求数,则直接返回503,-- 如果此处要允许突增的并发数,可以修改 burst 的值(漏桶的桶容量)-- 最后一个参数其实是你要预估这些并发(或者说单个请求)要处理多久,以便于对桶里面的请求应用漏桶算法local lim, err = limit_conn.new("my_limit_conn_store",2,1,0.5)if not lim thenngx.log(ngx.ERR,"限流:",err)return ngx.exit(503)endlocal key = ngx.var.binary_remote_addrlocal delay, err = lim:incoming(key, true)if not delay thenif err == "rejected" thenreturn ngx.exit(503)endngx.log(ngx.ERR, "failed to limit req:", err)return ngx.exit(500)end}proxy_pass http://backend/cache;}#error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}
fail_timeout:nginx在fail_timeout设定的时间内与后端服务器通信失败的次数超过max_fails设定的次数,则认为这个服务器不在起作用;在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。
upstream name{server 192.168.0.21:80;server 192.168.0.22:80;check interval=3000 rise=2 fall=5 timeout=1000;
}
#对所有节点,每个3秒检测一次,请求2次正常则标记 realserver状态为up,如果检测 5 次都失败,则标记 realserver的状态为down,超时时间为1秒
http {upstream backend {server 120.78.206.183:8080;server 14.116.196.138:8002;}lua_shared_dict healthcheck 1m;lua_socket_log_errors off;init_worker_by_lua_block {local hc = require "resty.upstream.healthcheck"local ok, err = hc.spawn_checker {shm = "healthcheck",upstream = "tomcat",type = "http",#指定后端健康检查http请求接口 http_req = "GET /nginx HTTP/1.0\r\nHost: tomcat\r\n\r\n",interval = 2000,timeout = 5000,fall = 3,rise = 2,#http请求接口返回200,302表示服务端正常valid_statuses = {200, 302},concurrency = 1,}if not ok thenngx.log(ngx.ERR, "=======> failed to spawn health checker: ", err)returnend}server {listen 80;server_name localhost;location ^~ /cache {proxy_cache one;proxy_no_cache $http_soapaction;proxy_cache_key $request_body;proxy_cache_valid 200 302 10m;proxy_cache_methods GET POST;proxy_ignore_headers Cache-Control Set-Cookie;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://backend/cache;}location /server/status {access_log off;default_type text/plain;content_by_lua_block {local hc = require "resty.upstream.healthcheck"ngx.say("Nginx Worker PID: ", ngx.worker.pid())ngx.print(hc.status_page())}}}
}
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
转载于:https://www.cnblogs.com/HushAsy/p/10302291.html
nginx限流健康检查相关推荐
- Nginx源码研究之nginx限流模块详解
这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...
- sql server 配置管理器里为什么是32位_死磕 Nginx 系列:Nginx 限流配置
点击上方 Java后端,选择 设为星标 优质文章,及时送达 限流算法:令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处 ...
- nginx 限流,以及nginx直接返回json格式数据
2019独角兽企业重金招聘Python工程师标准>>> 高并发系统有三把利器用来保护系统:缓存.降级和限流 今天我们这里说说限流.一般会在应用层配合redis做限流策略,这里我们聊聊 ...
- NGINX限流的一些思考
来源:http://blog.csdn.net/soar_away/article/details/51980247 我们经常遇到这种情况, 服务器资源有限,但是客户端来的请求在不断的上涨, 为了保证 ...
- Nginx的UDP健康检查
Nginx的UDP健康检查 本章介绍如何为负载平衡的上游服务器组中的UDP服务器配置不同类型的运行状况检查. 先决条件 被动UDP健康检查 主动UDP运行状况检查 微调UDP运行状况检查 " ...
- 一文搞懂Nginx限流(简单实现)
Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景.Nginx的限流主要是两种方式:限制访问频率和限制并发连接数. 限流(rate limi ...
- nginx限流以及配置管理
nginx限流以及配置管理 nginx限流 限制并发连接数 http状态码 限制相同客户端的访问频次 burst nodelay limit_rate限制带宽 nginx配置管理 自动索引 expir ...
- 高并发解决方案之“Nginx限流”
本文将分4个步骤讲解: 1.api压力测试 2.查看api响应性能 3.nginx限流进行优化 4.查看优化结果 1 api压力测试 1.1 安装压测工具 yum -y install httpd-t ...
- Nginx 限流方法
Nginx 限流方法 运维猿 2018-10-23 17:25:31 限流(rate limiting)是Nginx众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一.该特性可以限制某个用户 ...
最新文章
- 8月25号王者荣耀服务器维护,8月25日体验服停机更新公告
- c#如何通过ftp上传文件_ftp自动上传文件,如何设置ftp自动上传文件及环境配置...
- 微信小程序登录页php后台,微信小程序:微信登陆(ThinkPHP作后台)
- 规则引导的知识图谱联合嵌入方法
- 计算机桌面程序名,深度技术win7旗舰版电脑桌面图标只显示名称了怎么办
- 未来金融科技宣布已完成mBTC系统和技术升级,消费者可用比特币进行在线支付
- 马云等第一代互联网创始人退休,BAT 谁来接手?| 畅言
- 8、(八)外汇基础篇之外汇期权交易
- 我要偷偷的学Python,然后惊呆所有人(第九天)
- ubuntu16.04服务器下安装cuda9.0+cudnn7.0+tensorflow1.6.0+Anaconda3
- springboot工程中生成二维码(Java)
- HDOJ:1863畅通工程
- bind: An operation on a socket could not be performed because the system lacked sufficient buffer sp
- android M权限问题
- 虚幻引擎4简介,UE4简介--这是一个强大的游戏开发引擎
- mac 安装 Adobe CC XD
- ubuntu安装Kubernetes1.20.0
- 《第一行代码》总结之简介、Activity(一)
- dfema规则_六步搞定DFMEA表格
- 淘宝商品详情api接口代码对接分享
热门文章
- U-Boot顶层Makefile分析
- 全国计算机等级考试题库二级C操作题100套(第82套)
- java 无法加载资源,JavaScript:无法加载资源:服务器响应状态为404(未找到)
- mysql 查询语句_SQL语言mysql基础查询语句
- websocket 发送给前端一个对象_前端WebSocket封装
- mqtt 传文件断开连接的原因_MQTT PythonClient断开连接不当
- 手机定位和什么有关?关机后的手机还能被定位吗?
- 提高国内访问GitHub速度的9种方案~
- 数据库:后端开发必备的 MySQL日志文件知识点
- saej1929_(1929年-2020年)