实现日志切割以及访问控制

一、nginx日志切割

1.什么是日志切割?

日志切割就是把系统的日志以天为单位进行存放,即每一天的日志都分开放
企业当中每天都要备份昨天的日志,然后生成一个新的日志记录今天的
如果不做日志切割,当日志文件很大的时候,vim打开的时候可能卡死等等
而且排错的时候也简单,是哪天的问题查哪天的日志

2.为什么要进行日志切割?

在生产环境中每一天的日志文件都是要打包备份的
如果每天都手动的去截取日志,重命名这样就很不方便,所以我们编写一个脚本并建立一个定时任务来进行这些工作
日志切割是自动执行的,写在crotab定时任务里面,写一个脚本实现

3.对nginx服务器上面的日志进行日志切割(手动方式)

查看nginx服务器的日志都有哪些类型

cd /usr/local/lnmp/nginx/logs

日志名称     日志类型
access.log     存放成功访问nginx服务器的日志信息
error.log     存放访问nginx服务器失败的日志信息
nginx.pid     严格来说这个不算日志,里面存放的是nginx进程的pid

1)先查看nginx的access.log日志大小

cd /usr/local/lnmp/nginx/logs
[root@server1 logs]# du -sh access.log
20K    access.log

2)多次请求页面,再查看日志大小

[kiosk@foundation0 ~]$ ab -c 1 -n 100000 http://www.yyz.org/index.html    
             ##1表示1个并发,100000次请求

实现日志切割以及访问控制_第1张图片

3)再看日志大小
 

[root@server1 logs]# du -sh access.log
16M    access.log

4)接下来手动进行日志切割

[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log    ##因为第二天肯定是备份前一天的日志
[root@server1 logs]# /usr/local/lnmp/nginx/sbin/nginx -s reopen

2019-10-22_access.log  access.log  error.log  nginx.pid

将之前的日志即2019-10-22_access.log这个文件切割出去,然后将新的日志存放在access.log这个文件里
 

对nginx服务器上面的日志进行日志切割(脚本方式)

(1)在nginx服务的日志目录下面编写脚本

实现日志切割以及访问控制_第2张图片

实现日志切割以及访问控制_第3张图片

 (2)、给予其执行权限

chmod +x backup.sh

(3)、给切割出来的旧日志建立目录oldlogs

(4)、执行脚本,查看日志是否自动切割备份

./backup.sh

(5)、编写定时任务,使实际企业当中的服务器每天晚上的24:00准时去进行日志切割 

crontab -e

实现日志切割以及访问控制_第4张图片

二、Nginx改成systemd方式,来nginx启动脚本

1)系统启动脚本都在/usr/lib/systemd/system目录下,但是自己配置的服务官方不建议放在此目录下,放在/etc/systemd/system目录下

2)参考httpd服务的启动脚本作参考,来实现nginx的启动

cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/nginx.service

vim /etc/systemd/system/nginx.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/lnmp/nginx/logs/nginx.pid
ExecStart=/usr/local/lnmp/nginx/sbin/nginx
ExecReload=/usr/local/lnmp/nginx/sbin/nginx -s reload
ExecStop=/usr/local/lnmp/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target

3)用原来的方式关闭nginx

实现日志切割以及访问控制_第5张图片
4)启动nginx
systemctl start nginx

systemctl status nginx

这样就比之前的方便多了

三、nginx相关参数以及配置

1)最大连接数
worker_connections 65535    ##当nginx做反向代理时,这个数字要除以2来看最大连接数 

该参数在nginx的配置文件里

然后查看系统最大打开文件数:
 

sysctl -a | grep file
fs.file-max = 200603    ##最大打开文件数为200603,一个连接也是一个文件(socket文件,linux思想一切皆文件)

然后修改系统参数:
vim /etc/security/limits.conf

nginx    -    nofile        65535    ##加在最后

新建nginx用户:
useradd -M -d /usr/local/nginx -s /sbin/nologin nginx


四、Nginx的限制连接数

我们经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制
限制链接数    ##可以参考官网:

docs.nginx.com --> NGINX Plus --> Admin Guide --> Security Controls --> Limiting Access to Proxied HTTP Resources
vim nginx.conf

    ...ls
    keepalive_timeout  65;

    #gzip  on;
    #limit_conn_zone 用来限制同一时间连接数,即并发限制
    #limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”
    $binary_remote_addr是限制同一客户端ip地址
    zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
    # 定义一个名为addr的limit_conn_zone $binary_remote_addr是限制同一客户端ip地址

    #以下两条语句写在server之上
    limit_conn_zone $binary_remote_addr zone=addr:10m; #大小是10M内存 10M的内存来对于IP传输开销
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; #1s中不超过一个请求

    ...

        location / {
            root   html;
            index  index.html index.htm;
        }

    location /download {
        limit_conn addr 1;    ##只能一个并发,多了会报错
        limit_rate 50k;    ##限制带宽,每秒最多50k
    }

上面三个参数一个一个演示

演示前的准备:

mkdir /usr/local/lnmp/nginx/html/download

给download目录里放一个vim.jpg(约400k)

 

  • (1)设置访问的并发量,一秒只能接受一个请求(限制客户端请求的并发量为1个)
    在配置文件里面编写,访问/usr/local/nginx/html/search/这个目录下的资源
    实现日志切割以及访问控制_第6张图片
    这里的根表示的是/usr/local/nginx/html/
    实现日志切割以及访问控制_第7张图片
    建立共享的子目录search
    实现日志切割以及访问控制_第8张图片
    给子目录下面放一个图片
    实现日志切割以及访问控制_第9张图片
    进行语法检测
    实现日志切割以及访问控制_第10张图片
    重新加载
    在这里插入图片描述
    客户端测试:一次并发请求10个,我们设置的并发量是1,因此只会成功1个
    实现日志切割以及访问控制_第11张图片
    实现日志切割以及访问控制_第12张图片
  • (2)设置burst
    编辑配置文件,设置burst=5

    在这里插入图片描述
    实现日志切割以及访问控制_第13张图片
    检测语法和重新加载服务
    实现日志切割以及访问控制_第14张图片
    测试:

  • 虽然并发量为1,但是burst的值是5,最多可以访问5次,并且5次都成功
    可以将多余的请求暂时缓存起来
    如果一次并发请求超过5次,超过的请求就会失败

    实现日志切割以及访问控制_第15张图片
    实现日志切割以及访问控制_第16张图片
    实现日志切割以及访问控制_第17张图片
    因此大概需要5s
  • (3)设置每秒访问50k,访问5次,444*5 = 2220 ,2220/50约44秒
    编辑配置文件

    在这里插入图片描述
    实现日志切割以及访问控制_第18张图片
    语法检测与重新加载服务
    实现日志切割以及访问控制_第19张图片
    测试
    实现日志切割以及访问控制_第20张图片
    实现日志切割以及访问控制_第21张图片
    实现日志切割以及访问控制_第22张图片
  • (4)内置变量,1秒1k
    实现日志切割以及访问控制_第23张图片
    实现日志切割以及访问控制_第24张图片
    实现日志切割以及访问控制_第25张图片
    测试:发现一直在加载页面
    实现日志切割以及访问控制_第26张图片
    实现日志切割以及访问控制_第27张图片
    总结:以上就是最基本的几种访问控制策略

你可能感兴趣的:(Nginx)