nginx 防止高负载的解决方案(sysgurad模块)

摘要:如果nginx被攻击或者访问量突然变大,nginx会因为负载变高或者内存不够用导致服务器宕机,最终导致站点无法访问。今天要谈到的解决方法来自淘宝开发的模块nginx-http-sysguard...

作者:LoveCode标签:nginx,nginx模块,nginx高负载,nginx-http-sysguard,sysguard

如果nginx被攻击或者访问量突然变大,nginx会因为负载变高或者内存不够用导致服务器宕机,最终导致站点无法访问。今天要谈到的解决方法来自淘宝开发的模块nginx-http-sysguard,主要用于当负载和内存达到一定的阀值之时,会执行相应的动作,比如直接返回503,504或者其他的.一直等到内存或者负载回到阀值的范围内,站点恢复可用。

sysguard指令

语法: sysguard [on | off]
默认值: sysguard off
配置段: http, server, location
开关模块

语法: sysguard_load load=number [action=/url]
默认值: none
配置段: http, server, location
指定负载阀值,当系统的负载超过这个值,所有的请求都会被重定向到action定义的uri请求中.如果没有定义URL action没有定义,那么服务器直接返回503

语法: sysguard_mem swapratio=ratio% [action=/url]
默认值: none
配置段: http, server, location
定义交换分区使用的阀值,如果交换分区使用超过这个阀值,那么后续的请求全部被重定向到action定义的uri请求中.如果没有定义URL action没有定义,那么服务器直接返回503

语法: sysguard_interval time
默认值: sysguard_interval 1s
配置段: http, server, location
定义系统信息更新的频率,默认1秒.

语法: sysguard_log_level info | notice | warn | error
默认值: sysguard_log_level error
配置段: http, server, location
定义sysguard的日志级别

sysguard使用实例

nginx配置

server {
    listen       80;
    server_name  www.ttlsa.com www.heytool.com;
    access_log  /data/logs/nginx/www.ttlsa.com.access.log  main;
 
    index index.html index.php index.html;
    root /data/site/www.ttlsa.com;
 
    sysguard on;
    sysguard_load load=0.01 action=/loadlimit; #为了方便测试,load阀值为0.01,平时大家一般都在5或10+
    sysguard_mem swapratio=20% action=/swaplimit;
 
    location / {
 
    }
 
    location /loadlimit {
        return 503;
    }
 
    location /swaplimit {
        return 503;
    }
}

nginx测试

因为站点下没有文件,所以返回了403,实际上没关系
# uptime 
 16:23:37 up 6 days,  8:04,  2 users,  load average: 0.00, 0.01, 0.05
# curl -I www.ttlsa.com
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 03 Oct 2013 16:27:13 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
负载超过阀值的情况下,访问nginx
# uptime 
 16:25:59 up 6 days,  8:06,  2 users,  load average: 0.05, 0.04, 0.05
# curl -I www.ttlsa.com
HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx
Date: Thu, 03 Oct 2013 16:26:19 GMT
Content-Type: text/html
Content-Length: 206
Connection: keep-alive
CopyRight © 2017 荒山本的官方网站 粤ICP备16049175号 All Right Service 网站地图(xml) 网站地图(html)