日志不记录静态文件,日志切割,静态文件过时缓存,nginx防盗链

日志不记录静态文件

  • 在访问日志里,过滤掉一些图片,js,css,类的请求日志
  • 这种请求日志没什么用处,还占用磁盘空间
  • 因此应该把这种请求从日志里过滤掉
  • 这样日志文件就不会记录这种请求,浪费磁盘空间
  • 上图是访问日志的信息
  • 能够看到,第一个是静态的 js 文件
  • 第二个请求的是 .gif 文件,也是静态文件的请求
  • 在配置文件里面设置,能够把这种文件的请求信息过滤掉
  • 不记录到日志里面
  • cd /etc/nginx/conf.d/
  • 进入配置文件目录,而后 vi tom.bbs.conf 编辑配置文件
  • 如图,添加上图代码块
location ~* \.(png|jpeg|gif|js|css|bmp|flv)$ {
	access_log off;
}
  • 上图代码里面 * 表明不区分大小写
  • . 是正则,表明任意长度字符,由于 . 须要转义,因此前面要加 \
  • (png|jpeg|gif|js|css|bmp|flv) 是一个总体
  • 意思是 png或jpeg或gif或js .... 的意思
  • $ 表明结尾的意思
  • 就是以 (png|jpeg|gif|js|css|bmp|flv) 其中之一结尾的意思
  • access_log off; 表示符合上面条件,不写入访问日志
    • 的不区分大小写是指 (png|jpeg|gif|js|css|bmp|flv)
  • 里面的 png,jpeg,gif,js,css这些字符串不区分大小写进行匹配的意思
  • 能够是 png 或 Png 或 PNG 等等都符合匹配条件
  • 整个代码块的意思就是
  • 请求的文件名称以 (png|jpeg|gif|js|css|bmp|flv) 其中之一结尾
  • 不区分大小写,这个请求信息就不写入访问日志
  • 而后保存退出,使用 nginx -t && nginx -s reload 检测重载配置文件
  • cd /data/logs/bbs 进入bbs目录
  • 使用命令 > bbs.access.log
  • 这样就能够清空日志内容,如今日志什么东西都没有了
  • 而后使用 tail -f bbs.access.log
  • 这样能够查看日志的最后10行,并且是动态的
  • 也就是说,使用这个命令后,日志不会自动关闭
  • 而是能够随着日志的更新,不断显示最新的日志内容
  • 如图,打开论坛,f12 打开右边界面,能够看到网页请求的信息
  • 能够看到请求的文件有不少 png 文件
  • f5能够刷新缓存
  • 使用 tail -f bbs.access.log 动态查看访问日志
  • 能够看到,请求信息里面,没有任何 png
  • 或者别的过滤掉的格式的文件的请求信息
  • 这样就成功把指定格式结尾的文件过滤掉了

日志切割

  • 日志文件会不断的增大
  • 若是日志文件太大,会难以查看
  • 并且磁盘也会被写满
  • 因此须要对日志进行切割
  • 好比天天0点0分切割一次
  • 系统里面日志切割的服务叫作 logrotate
  • cat /etc/logrotate.conf 能够查看logrotate服务的配置文件
  • 上图是配置文件内容,第一个 weekly 表示每周切割一次
  • 第二个 rotate 4 表示保留4个
  • 切割了4个后,第5个会把前面的覆盖掉
  • 第三个 create 表示把旧的文件名字修改以后
  • 而后建立一个新的空文件
  • 第四个 dateext 表示文件名称使用日期后缀
  • 第五个 compress 表示压缩文件
  • 可是这里是注释掉了,因此意思就是不压缩
  • 若是须要压缩文件,能够把 compress前面的#取消掉
  • 第六个 include /etc/logrotate.d
  • 意思是包含了 logrotate.d 目录下的子配置文件
  • 上图是logrotate.conf 最后的内容
  • 这里 /var/log/wtmp 是一个文件
  • 大括号内的内容是针对这个文件进行的一些配置
  • monthly 表示按月进行切割
  • create 0664 root utmp 是指建立新文件的权限
  • wtmp文件被切割后,建立的新文件权限就是 0664
  • 全部者是 root ,所属组为 utmp
  • minsize 1M 表示每一个文件最小为 1MB
  • 若是文件大小小于1MB,那么就不会对这个文件进行切割
  • rotate 1 表示只保留一个文件
  • 第二个代码块 /var/log/btmp {}
  • 也是针对 btmp 文件的一些配置
  • missingok 表示忽略错误
  • monthly 表示按月切割
  • create 0600 root utmp 一样表示建立的新文件的权限,全部者,所属组
  • rotate 1 只保留一个文件

  • 若是把nginx 的日志文件,也写入这个日志切割服务的配置文件里面
  • 那么日志切割服务就能够切割 nginx 的日志文件了
  • 也能够把 nginx 日志切割的配置文件放到 /etc/logrotate.d/ 目录下面
  • logrotate.conf配置文件也包含了 logrotate.d目录下面的子配置文件
  • 若是是 yum 安装的 nginx
  • 默认会生成 /etc/logrotate.d/nginx 这个配置文件
  • 上图是 /etc/logrotate.d/nginx 文件的内容
  • daily 表示天天切割
  • missingok 表示忽略错误
  • rotate 52 表示保留52个文件,每一个文件表明一天
  • 因此就是保留 52 天的记录
  • compress 表示对文件进行压缩
  • delaycompress 表示延迟压缩
  • 原本压缩文件是会压缩昨天切割好的文件的
  • 可是延迟压缩就不会压缩昨天的文件,而是压缩前天的文件
  • notifempty 表示不切割空的文件
  • create 640 nginx adm 表示建立新文件的权限,全部者,所属组
  • sharedscripts 表示加载一段脚本
  • endscript 表示脚本结束
  • 这两行中间的内容就是脚本内容
  • 如图,/var/log/niginx/ 目录是nginx自带的日志文件目录
  • 能够看到,目录里面已经切割压缩了几个日志文件
postrotate
		if [ -f /var/run/nginx.pid ]; then
				kill -USR1 'cat /var/run/nginx.pid'
		fi
  • 这是shell 脚本,会在天天切割完 nginx 日志文件以后执行
  • 这个脚本的目的是当切割完日志文件后
  • 从新载入配置文件,这样就能够生成新的日志文件
  • 若是不执行这个脚本的话
  • 好比说原来的日志文件是 1.log,切割以后变成了 2.log
  • 1.log就消失了,可是日志服务会写新的日志进 1.log
  • 而 1.log 文件不存在,这样就会发生错误
  • 执行上面的脚本重载配置文件后,就会生成新的 1.log 文件
  • 这样日志服务就能够正常运转

  • vi /etc/logrotate.d/nginx 编辑 nginx 日志配置文件
  • 如图,修改一下配置文件
  • 定义了两个目录,/var/log/nginx/*.log 是默认的日志文件目录
  • 后面加上 /data/logs/*.log 是新添加的日志文件目录
  • 对这两个目录内的 .log 结尾的文件都会执行大括号内的指令
  • 在本来的指令之间,添加了 dateext
  • 这是让切割的日志文件名称以 日期为后缀
  • rotate 7 保留7个文件,原来是52的
  • 而后保存退出
  • 如图,logrotate 命令能够执行切割指令
  • 选项 -v 能够看到执行的过程
  • /etc/logrotate.d/nginx 是配置文件
  • 意思就是按照这个配置文件的内容执行切割
  • 看显示的内容,由于某些缘由没有进行切割
  • 多是没有达到切割的条件的缘由
  • 选项 -f 能够忽略这些因素,进行强制切割
  • 如图,修改 /etc/logrotate.d/nginx 的内容
  • 原来的目录是 /data/logs/.log 如今修改成 /data/logs/bbs/.log 保存退出
  • 而后使用 logrotate -v /etc/logrotate.d/nignx 执行切割
  • 没有成功,由于如今没到切割的时间
  • 因此使用 logrotate -vf /etc/logrotate.d/nignx 进行强制切割
  • 如图,信息显示成功切割了 /data/logs/bbs/bbs.access.log 文件
  • 如图,cd /data/logs/bbs/ 目录,使用 ls 查看内容
  • 能够看到,成功切割了 bbs.access.log-20191102 文件出来

静态文件过时缓存

  • 浏览器打开一个页面
  • 第一次向服务器请求文件以后
  • 页面的不少静态文件会保存在浏览器缓存里面
  • 若是第二次请求这些静态文件的话,好比图片,js,css等
  • 浏览器并不会把请求发送到服务器
  • 而是直接在浏览器缓存里面调用
  • 因此这些静态文件的第二次请求并不会被记录到服务器访问日志里面
  • 由于实际上并无访问服务器
  • 可是若是某一个静态文件进行了修改
  • 浏览器第二次请求从缓存调用的话,就会形成浏览器的数据
  • 和服务器的数据不一致,这样显然不合理
  • 因此须要在服务器对静态文件设置一个过时时间
  • 浏览器向服务器请求了一个静态文件后
  • 这个静态文件拥有一个过时时间
  • 到达过时时间后,浏览器就会从新向服务器请求新的文件
  • 而不是调用缓存
  • 对静态文件设置过时时间,首先打开虚拟主机的配置文件
  • cd /etc/nginx/conf.d/
  • vi 打开 tom.bbs.conf 配置文件
  • 如图,在匹配静态文件的代码块里面
  • 添加一行 expires 1d;
  • 意思是过时时间设置为 1天
  • 还可使用别的单位,好比小时,分钟之类的
  • 小时是 h,这里设置为 1d 也就是 1天
  • 而后保存退出
  • 如图,f12 打开浏览器调试界面
  • 把以前请求下来的图片的 请求路径复制下来
  • 如图,使用 curl -x127.0.0.1:80 -I 请求url
  • 这里 -x 后面是请求链接的 ip地址和端口
  • 由于这个图片在本机,因此这里使用本机回环地址 127.0.0.1
  • 端口是 80 这是nginx 默认的端口
  • 选项 -I 表示只查看 header 信息
  • 最后是请求链接的 url
  • 下面能够看到返回的 header 信息
  • 并无发现有文件过时时间的信息
  • 而后 nginx -t && nginx -s reload 检查重载一下刚才修改的配置文件
  • 而后从新使用 curl 测试一下刚才图片的url
  • 如图,修改配置文件后,从新检测图片的 url
  • 返回的header信息里面,多了一行 cache-control: max-age=86400
  • 86400 的单位是 秒
  • 这里能够安装一个工具 yum install -y bc
  • 这个工具能够辅助计算过时时间
  • 如图,输入 bc 回车 进入程序
  • 进入程序后,输入 86400/3600 回车
  • 系统返回 24
  • 由于 86400 的单位是 秒
  • 1分钟=60秒,1小时=60分钟,因此 1小时 = 60秒 * 60 = 3600秒
  • 86400/3600 = 24小时 = 1天
  • 这个数据跟配置文件里面设置的过时时间为 1天 是一致的
  • 这就表示配置文件设置过时时间生效了
  • 超过1天的静态文件,浏览器就会从新向服务器请求新的数据
  • 而不是继续使用缓存中的过时数据

nginx防盗链

  • 有两个网站 a 和 b
  • 在 a 网站调用 b 网站的资源,好比图片,文章等
  • 叫作盗链
  • 没有通过 b 网站的赞成,就调用了 b 网站的资源
  • 这显然不合理
  • 因此须要在 b 网站上面作防盗链设置
  • 这样 a 网站就不能随意调用 b 网站的资源了
  • 先安装一个工具 yum install -y lrzsz
  • 这个工具能够从 windows 上传下载文件到 linux 里面
  • cd /tmp/tomblog/ 目录
  • 这个目录是博客的根目录
  • 如图,使用 rz 命令,从windows 上传了 1.png 文件到 tomblog 目录里面
  • 如图,在论坛网站发一个帖子
  • 选择添加图片,这里选择使用网络图片
  • 直接写 http://tomblog/1.png 的访问路径
  • 如图,tomblog 目录下面的 1.png 图片就被成功调用了
  • 如图,成功发表了这个带图片的帖子
  • cd /etc/nginx/conf.d 进入配置文件的目录
  • vi tom.blog.conf 编辑博客的配置文件
  • 上图是配置文件的内容,如今须要添加修改一些内容
  • 如图,添加这个代码块
  • 这个代码块是针对 png,gif,js,css 等这里写了的后缀名的文件作的设置
  • 若是向网站请求 png等后缀名的文件,就会使用大括号内的设置
  • 防盗链的设置主要是如下代码的做用
valid_referers none blocked server_names *.blog.com;
        if ($invalid_referer) {
                return 403;
        }
  • 这个代码块产生防盗链的做用
  • valid_referers 是白名单
  • none 表示当 referers 为空就能够访问
  • 若是从 a 网站访问 b网站的资源
  • 那么这个请求的 referers(来源) 就是 a网站
  • 若是从 b 网站访问 b网站的资源,那么 referers(来源) 就为空
  • 这里写 none 意思就是 referers 为空就是白名单
  • 也就能够访问,若是referers不为空,也就是来源是别的网站
  • 那就不是白名单,也就不能访问
  • 通常合法的访问链接都是 http:// 或者 https:// 开头的链接
  • 也有一些链接不以 http开头,而是直接 www 开头或者别的开头
  • 这样的链接就是非法链接
  • 这里使用了 blocked
  • 那么不以 http 开头的链接,也是合法的链接
  • 若是不使用 blocked ,那么不以http开头的链接就是非法链接
  • 不能访问,blocked 能够用也能够不用,通常不多用到
  • server_names 就是服务器的名字,后面接能够访问的服务器名称
  • 符合这里定义的服务器名称的服务器就表示是白名单服务器
  • 就能够访问这个网站上面定义的资源
  • 不符合的就是黑名单
  • 这里设置的白名单服务器名称是 *.blog.com
    • 是正则表达式,*.blog.com
  • 表示服务器名称以 .blog.com 结尾的服务器
  • 就是白名单服务器,能够访问
  • 下面的 invalid_referer 就是黑名单的意思
  • return 403 表示黑名单服务器访问上面定义的资源就返回 403
  • 不符合白名单的访问全都是黑名单
  • 而后保存退出,使用 nginx -t && nginx -s reload 检测重载配置文件
  • 如图,访问论坛网站刚才发的帖子
  • f12 打开调试页面
  • f5 重载页面
  • 能够看到,原本在帖子里面的图片已经不见了
  • 右边查看请求的文件,能够看到
  • 1.png 的请求,返回的状态码是 403
  • 这样就表示 防盗链设置成功了
  • 如图,进入tomblog的配置文件,原本 root 是在 location 代码块内部的
  • 如今把 location 删除,让 root 成为全局的变量
  • 这样访问网站资源的时候,就能够直接在域名后面访问根目录里面的内容了
  • 保存退出,nginx -t && nginx -s reload 检测重载一下配置文件
  • 如图,在 tomblog 的域名后面,直接访问 1.png 就能够访问到这个图片
  • 若是配置文件内,不设置 root 全局变量
  • 这里就不能直接从域名后面直接访问根目录内的文件
  • 由于没有定义 root 全局变量浏览器就不能直接从根目录访问资源
相关文章
相关标签/搜索