Nginx服务器防护:集成系统监控模块
当Web服务器面临突发流量或遭受攻击时,可能导致系统资源耗尽而停止响应。为避免服务完全中断,可以通过部署系统监控机制实现优雅降级。本文介绍如何在Nginx中集成阿里开源的sysguard模块,实现在系统压力过高时自动返回错误页面,待资源恢复后再恢复正常服务。
以下操作基于Ubuntu 12.04环境进行配置。
首先从官方网站获取Nginx 1.12.1版本源代码:
wget http://nginx.org/download/nginx-1.12.1.tar.gz
mkdir /opt/nginx-source
mv nginx-1.12.1.tar.gz /opt/nginx-source/
cd /opt/nginx-source
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1
初次编译可能会遇到依赖缺失问题,需要逐个解决:
- SSL支持:安装
openssl libssl-dev - XSLT处理:安装
libxml2-dev libxslt1-dev - 图像处理:安装
libgd2-xpm-dev - 地理位置:安装
libgeoip-dev - Perl支持:安装
libperl-dev
清理不必要的模块引用后,执行基础配置命令:
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module
完成配置后执行编译安装:
make && sudo make install
接下来集成系统保护模块。从GitHub获取最新版本:
cd /opt/nginx-source
wget https://github.com/alibaba/nginx-http-sysguard/archive/master.zip
unzip master.zip
应用补丁文件:
patch -p1 < nginx-http-sysguard-master/nginx_sysguard_1.3.9.patch
重新配置Nginx,加入新模块支持:
./configure \
[原有参数...] \
--add-module=/opt/nginx-source/nginx-http-sysguard-master
再次编译安装:
make && sudo make install
修改配置文件/etc/nginx/nginx.conf,在server块中添加监控规则:
server {
listen 80;
server_name localhost;
root /var/www/html;
sysguard on;
sysguard_load load=0.01 action=@busy;
sysguard_mem swapratio=20% action=@memory_full;
location @busy {
return 503 "Server busy, please try later";
}
location @memory_full {
return 503 "Memory limit exceeded";
}
location / {
index index.html;
}
}
创建测试文件目录并放置静态资源:
sudo mkdir -p /var/www/html
echo "Test Page" > /var/www/html/index.html
启动服务前确保运行用户存在:
sudo useradd www-data
sudo /usr/local/sbin/nginx -c /etc/nginx/nginx.conf
通过调整系统负载验证功能:
# 提高CPU负载
dd if=/dev/zero of=/dev/null &
# 查看当前负载
uptime
# 停止负载生成
killall dd
当系统负载超过设定阈值时,Nginx将自动返回503状态码,避免服务器崩溃。负载降低后服务自动恢复。