nginx限流与配置管理
Nginx作为web服务器的一些功能
一、nginx限流
在nginx发布目录下创建一个目录,并存储一张照片进行测试
创建目录
[root@server1 html]# pwd
/usr/local/nginx/html
[root@server1 html]# ls
50x.html index.html
[root@server1 html]# mkdir download
从宿主机传一张大小为828k的照片
[root@server1 html]# cd download/
[root@server1 download]# ls
1.jpg
[root@server1 download]# du -h 1.jpg
828K 1.jpg
rehl8安装图像处理工具ImageMagick
[root@wlb file_recv]# yum install -y ImageMagick ImageMagick-devel.x86_64
[root@wlb file_recv]# cd nginx/picture/
[root@wlb picture]# ls
vim_command.png vim.png vim键图.png
[root@wlb picture]# display vim.png
linux devel是什么意思
从限制并发量到限制请求数,再到队列
1.控制单ip并发连接数
[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
http模块添加:
limit_conn_zone $binary_remote_addr zone=addr:10m;
$binary_remote_addr 表示通过remote_addr这个标识来做限制,nginx的内部变量,取的是远端客户端的地址
zone=addr:10m 表示创建一个大小为10M,名字为addr的内存区域
可以多开几个内存区域进行不同限制
location /download {
limit_conn addr 1; #限制并发连接数为1
}
*压力测试
[root@westos_student73 mnt]# ab -c10 -n10 http://172.25.254.11/download/1.jpg
#通过客户端进行ab压测,-c表示并发数,-n表示访问十次、
[root@server1 conf]# cat /usr/local/nginx/logs/access.log
#nginx查看访问日志
客户端
HTTP状态码,可以很快地找到问题所在点,比如200表示访问成功,300表示重定向,400表示是客户端问题,请求资源不存在或者错误,500表示是服务端问题。
HTTP状态码
HTTP状态码详解
2.控制单位时间的请求数
测试
[root@westos_student73 mnt]# ab -c1 -n10 http://172.25.254.11/download/1.jpg
并发数改为1,防止前面设置影响实验结果
设置生效前
设置生效后
[root@server1 conf]# nginx -t
nginx检测是否有设置错误
[root@server1 conf]# nginx -s reload
nginx重新加载
[root@server1 conf]# cat /usr/local/nginx/logs/access.log
[root@server1 conf]# > /usr/local/nginx/logs/access.log
清空一下访问日志
[root@server1 conf]# cat /usr/local/nginx/logs/access.log
排队设置
测试效果
限流是为了一些情况下,服务器不崩溃
nodelay与brust参数共同作用时,表示不延迟处理队列中的请求后,就不再接受请求。
3.限制带宽
测试
二、nginx配置管理
1.自动索引
用处:下载方便
location /download {
autoindex on;
#打开自动索引
}
效果
2.Nginx expire(到期)缓存配置
缓存可以降低网络带宽,加速用户访问,一般主要用于静态空间,网站图片不怎么修改的地方,比如网站公司介绍
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root html;
}
3.日志轮询(日志截断备份)
大量访问会导致ningx日志增长特别块,一些门户型站点,比如阿里每天的匹配量过亿。所以日志需要经常截断。
创建脚本
[root@server1 logs]# cat /opt/nginx_log.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
赋予执行权限
[root@server1 logs]# chmod +x /opt/nginx_log.sh
加入crontab定时任务
[root@server1 logs]# crontab -e
[root@server1 logs]# crontab -l
00 00 * * * /opt/nginx_log.sh &> /dev/null
为了安全,日志目录不给nginx用户访问权限
chmod -R 700 /usr/local/nginx/logs
创建脚本
加入定时任务
4.状态模块激活
location /status {
stub_status on;
}
效果
5.禁用不必要日志
location /status {
stub_status on;
access_log off;
}
6.站点目录和文件的访问限制
loaction ~ ^/images/.*\.(sh|php)${
deny all;
}
^表示匹配以什么开头,.*\.匹配的是以什么结尾
上边表示的是在/images/目录下以sh或者php结尾的文件都不能访问
6.中文乱码
charset utf-8;
7.限制ip
location / {
deny 172.24.254.73;
allow 172.25.254.11/24;
deny all;
}
if ($remote_addr=172.25.254.73){
return 403;
}
#使用正则表达式,如果远程主机是172.25.254.73访问,返回403,和deny类似。
8.ssl模块
三、goaccess日志可视化
软件安装
下载安装包
[root@server1 ~]#ssh root@172.25.254.73
[root@westos_student73 ~]# cd /mnt/
[root@westos_student73 mnt]# scp goaccess-1.4.tar.gz root@172.25.254.11:/root
[root@server1 ~]# tar zxf goaccess-1.4.tar.gz #解压
[root@server1 ~]# cd goaccess-1.4
[root@server1 goaccess-1.4]# ./configure --enable-utf8 --enable-geoip=legacy
[root@server1 goaccess-1.4]# yum search geoip
[root@server1 goaccess-1.4]# rpm -q GeoIP.x86_64
[root@server1 goaccess-1.4]# ssh root@172.25.254.73
[root@westos_student73 ~]# cd /mnt/
#下载所需软件
[root@westos_student73 mnt]# scp GeoIP-devel-1.5.0-13.el7.x86_64.rpm root@172.25.254.11/root
[root@server1 ~]# rpm -ivh GeoIP-devel-1.5.0-13.el7.x86_64.rpm #安装
[root@server1 goaccess-1.4]# ./configure --enable-utf8 --enable-geoip=legacy
[root@server1 goaccess-1.4]# yum provides */ncursesw
[root@server1 goaccess-1.4]# yum install -y ncurses-devel
[root@server1 goaccess-1.4]# ./configure --enable-utf8 --enable-geoip=legacy
[root@server1 goaccess-1.4]# make
[root@server1 goaccess-1.4]# make install
[root@server1 html]#goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
ctrl + z
[root@server1 html]# bg #打入后台运行,会时刻监控日志变化
展示效果
测试
[root@westos_student73 mnt]# ab -c10 -n200 http://172.25.254.11/index.html