【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 图片到论坛中
此时我们还未进行防盗链配置,图片是可以正常显示的
- 下面将防盗链配置写入虚拟主机配置文件中
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
来源:oschina
链接:https://my.oschina.net/u/4095803/blog/4278159