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 then
ngx.log(ngx.ERR,"限流:",err)
return ngx.exit(503)
end
local key = ngx.var.binary_remote_addr
local delay, err = lim:incoming(key, true)
if not delay then
if err == "rejected" then
return ngx.exit(503)
end
ngx.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 then
ngx.log(ngx.ERR, "=======> failed to spawn health checker: ", err)
return
end
} 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;">
nginx限流&健康检查的更多相关文章
- Nginx限流办法
Nginx 限流 电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单.信誉分析,进而根据用户ip信誉权重做相应的流量拦截.限制流量.Nginx自身有的请求限制模块ng ...
- 死磕nginx系列--nginx 限流配置
限流算法 令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处理: 令牌不够时,请求被缓存. 漏桶算法 算法思想是: 水( ...
- 图解Nginx限流配置
本文以示例的形式,由浅入深讲解Nginx限流相关配置,是对简略的官方文档的积极补充. Nginx限流使用的是leaky bucket算法,如对算法感兴趣,可移步维基百科先行阅读.不过不了解此算法,不影 ...
- Nginx限流
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 在当今流量徒增的互联网时代,很多业务场景都会涉及到高并发.这个时候接口进行限流是非常有必要的,而限流是Ngin ...
- [转]Nginx限流配置
原文:https://www.cnblogs.com/biglittleant/p/8979915.html 作者:biglittleant 1. 限流算法 1.1 令牌桶算法 算法思想是: 令牌以固 ...
- nginx限流模块(防范DDOS攻击)
Nginx限流模式(防范DDOS攻击) nginx中俩个限流模块: 1.ngx_http_limit_req_module(按请求速率限流) 2.ngx_http_limit_conn_module( ...
- Nginx 限流
原文链接:http://colobu.com/2015/10/26/nginx-limit-modules/?utm_source=tuicool&utm_medium=referral 电商 ...
- Nginx限流配置
电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单.信誉分析,进而根据用户ip信誉权重做相应的流量拦截.限制流量.Nginx自身有的请求限制模块ngx_http_li ...
- nginx后端节点健康检查
一.nginx健康检查的三种方式 .ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/d ...
随机推荐
- 冲刺Noip2017模拟赛1 解题报告——五十岚芒果酱
题1 国际象棋(chess) [问题描述] 有N个人要参加国际象棋比赛,该比赛要进行K场对弈.每个人最多参加2场对弈,最少参加0场对弈.每个人都有一个与其他人都不相同的等级(用一个正整数来表示).在对 ...
- jquery设置input不可编辑,背景变灰,鼠标变禁止
先看效果 $("#id").attr("onfocus", "this.blur()"); $("#id").css(& ...
- private关键字 this关键字
基本类型的布尔值boolean定义get方法,名称应该为isMale 当方法的局部变量和类的成员变量重名的时候,根据就近原则,有限使用局部变量, 如果需要访问成员变量 则使用this.name 构造 ...
- Solr 8.2 使用指南
1 Solr简介 1.1 Solr是什么 Solr是一个基于全文检索的企业级应用服务器.可以输入一段文字,通过分词检索数据.它是单独的服务,部署在 tomcat. 1.2 为什么需要Solr 问题:我 ...
- Python Excel文件的读写操作(xlwt xlrd xlsxwriter)
转:https://www.cnblogs.com/ultimateWorld/p/8309197.html Python语法简洁清晰,作为工作中常用的开发语言还是很强大的(废话). python关于 ...
- Linux系列之压缩与解压
1.压缩技术 1.常用命令实例 1.zip格式的压缩与解压缩 zip是压缩指令,unzip是解压指令.zip指令既可以压缩文件,也可以压缩目录.压缩会自动保留源文件,解压会自动保留压缩文件. zip ...
- selenium+java+testNG+maven环境搭建
一.简单介绍 1.selenium: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Fir ...
- 三分钟搞定Python中的装饰器
python的装饰器是python的特色高级功能之一,言简意赅得说,其作用是在不改变其原有函数和类的定义的基础上,给他们增添新的功能. 装饰器存在的意义是什么呢?我们知道,在python中函数可以调用 ...
- Zookeeper快速开始
具体部署流程: #下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5. ...
- S03_CH02_AXI_DMA PL发送数据到PS
S03_CH02_AXI_DMA PL发送数据到PS 1.1概述 本课程的设计原理分析. 本课程循序渐进,承接<S03_CH01_AXI_DMA_LOOP 环路测试>这一课程,在DATA ...