【1017】nginx访问日志,日志切割,防盗链

无人久伴 提交于 2020-07-27 10:45:04

                                 【1017】nginx访问日志,日志切割,防盗链

4.38 nginx访问日志

4.39 日志不记录静态文件

4.40 日志切割

4.41 静态文件过期缓存

4.42 nginx防盗链

 

4.38 nginx访问日志

访问日志:就是用户访问网站的记录

主要就是配置路径加格式

1、配置方法:

1)、主配置文件 /etc/nginx/nginx.conf 中,定义日志格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" "$http_x_forwarded_for"';

对应变量含义:

变量                  含义

$remote_addr         客户端IP(公网IP)

$http_x_forwarded_for   代理服务器的IP

$time_local            服务器本地时间

$host                  访问主机名(域名)

$request_uri             方法,访问的url地址,请求的http版本

$status                状态码是200还是301,302

$http_referer             referer从哪里跳过来的

$body_bytes_sent         请求链接的大小

$http_user_agent          浏览器标识,用的什么版本的浏览器

nginx内置全局变量汇总:

https://blog.csdn.net/arsenal4life/article/details/102616484

 

2)、虚拟主机配置文件 /etc/nginx/conf.d/bbs.warmsake.com.conf 的最下方,加入一行 access_log

access_log  /data/logs/bbs.access.log  main;

用于定义访问日志

2、改好配置后,需要创建 /data/logs/ 目录,否则会报错

[root@luo ~]# mkdir /data/logs/

[root@luo ~]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@luo ~]# nginx -s reload

[root@luo ~]# cat /data/logs/bbs.access.log

3、访问网页后,日志会产生以下内容

[root@luo ~]# cat /data/logs/bbs.access.log

 

4.39 日志不记录静态文件

日志不记录静态文件:就是在访问日志里,过滤掉一些图片、js、css类的请求日志因为此类请求没有多大用处,而且会占用很大的磁盘空间

配置方法:

/etc/nginx/conf.d/bbs.warmsake.com.conf 里 server_name 下增加一段 location,如下

    location ~* \.(png|jpeg|gif|js|css|bmp|flv)

    {

        access_log off;

    }

清空访问日志,再去访问网页,之后查看访问日志,就不会出现以上后缀名的记录了

[root@luo ~]# tail /data/logs/bbs.access.log

补充:

tail -f /data/logs/bbs.access.com // -f 可以动态查看一个文件的内容

> 可以清空一个文件内容

~* 表示不区分大小写的匹配,后面跟正则表达式

. 表示任意字符

 

4.40 日志切割

日志切割目的:/data/logs访问日志有很多,日志会越来越大,可能有一天就会把整个磁盘写满,比如有100G的日志查看起来很麻烦。

 

系统里有个日志切割的服务/工具: logrotate

logrotate 配置文件: /etc/logrotate.conf

子配置文件: /etc/logrotate.d/*

[root@luo ~]# cat /etc/logrotate.conf

其中Nginx 日志切割配置文件

/etc/logrotate.d/nginx

如果是 yum 安装的 nginx,那么 /etc/logrotate.d/nginx 中已经有 nginx 切割策略

[root@luo ~]# cat /etc/logrotate.d/nginx

daily 每天

dateext 使用以日期为后缀的日志名

missingok 忽略错误

rotate 7 保留7天

compress 是否要压缩

delaycompress 延后压缩(今天切割,昨天有一个文件,前天的文件可以压缩,昨天的不压缩)

notifempty 如果是空文件,不进行切割

create 640 nginx adm 创建回滚文件的权限,用户和用户组

sharedscripts 执行脚本

 

测试执行 logrotate -v /etc/logrotate.d/nginx

强制切割 logrotate -vf /etc/logrotate.d/nginx

[root@luo ~]# logrotate -v /etc/logrotate.d/nginx

[root@luo ~]# ll /data/logs/

[root@luo ~]# ll /var/log/nginx/

/var/log/nginx 下的日志已切割

 

4.41 静态文件过期缓存

服务端静态文件已经更新了,但用户端浏览器是一直在请求旧的缓存,这样不合理,需要设定过期时间

先查看bbs.warmsake.com上图片的信息

[root@luo ~]# curl -x127.0.0.1:80 -I http://bbs.warmsake.com/static/image/common/logo_88_31.gif

 

查看缓存有效时长:

[root@luo ~]# curl -I http://www.apelearn.com/src/images/lesson_16.png

max-age=2592000,单位是秒

也就是服务器上的过期时间为30天

设定过期时间,编辑虚拟主机配置文件

/etc/nginx/conf.d/bbs.warmsake.com.conf

    location ~* \.(png|jpeg|gif|js|css|bmp|flv)$

    {

        expires 1d;

        access_log off;

    }

设定完过期时间后,查看max-age

[root@luo ~]# curl -x127.0.0.1:80 -I http://www.luo.com/uc_server/images/noavatar_small.gif?ts=1583605784

设置完成后,过期时间为 24 小时

总结:

curl -x 用来指定目标服务器的IP和端口,例如:curl -x127.0.0.1:80 -I www.baidu.com

bc 是一个linux系统下的计算器,yum install -y bc

 

4.42 nginx防盗链

防盗链:

比如两个网站 A和 B,A 网站引用了 B 网站上的图片,这种行为就叫做盗链。防盗链,就是要防止 A 应用 B 的图片

编辑虚拟主机配置文件/etc/nginx/conf.d/blog.warmsake.com.conf,添加以下一段内容

location ~ \.(png|jpg|gif|jpeg|bmp|mp3|mp4|flv)$

{

        valid_referers none blocked server_names  *.test.com ;

    if ($invalid_referer) {

        return 403;

    }

}     

valid_referers 指的是白名单的 referer

none 表示空 referer,图片是打开的而不是跳转的

blocked 非法的链接,正常链接是 http:// 或 https:// 开头,如果不以他们开头的链接也可以成为合法的 referer,用的不多

server_names 就是上方定义的 server_name

*.test.com 就是白名单

 

1、准备: cd /data/wwwroot/blog.warmsake.com/先在 blog.warmsake.com 中使用rz命令上传一张图片,图片链接为 http://blog.warmsake.com/1.png

我们在bbs.warmsake.com 中发帖,并上传 http://blog.warmsake.com/1.png 图片到论坛中

此时我们还未进行防盗链配置,图片是可以正常显示的

  1. 下面将防盗链配置写入虚拟主机配置文件中

vim /etc/nginx/conf.d/blog.warmsake.com 在location /下面添加

(可以在配置后增加关闭访问日志和设置静态文件过期时间等参数,access_log、expires)

    location ~ \.(png|jpg|gif|jpeg|bmp|mp3|mp4|flv)$

    {

        valid_referers none blocked server_names  *.warm.com ;

        if ($invalid_referer) {

            return 403;

        }

        access_log off;

        expires 1d;

    }

(以上字段只是防盗链部分,其余部分不在这里展示)

注意要将root和index的花括号去掉。

3、配置完成后,重新加载 nginx 配置

[root@luo blog.warmsake.com]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@luuo blog.warmsake.com]# nginx -s reload

 

4、使用ctrl+F5强制刷新页面,发现其他人已经无法查看到图片

5、防盗链成功!

 

补充:

rz 上传文件,yum install lrzsz

sz filename 这样去可以把文件推送到win机器里

测试防盗链: curl -I -x127.0.0.1:80 -e “http://sasd.warm1.com/1.txt” http://blog.warmsake.com/1.png

curl -e 指定自定义的 referer,只有白名单referer才会是200

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!