网站大多为静态网页,网页内部的图片、css文件等一样有其网址连接,若是不设置,这些无效的信息也将被存入访问日志中,会致使访问日志文件大小快速增长,占用大量存储空间。咱们能够经过设置不记录某些文件来减小无效信息,节省内存资源。javascript
修改虚拟主机配置文件httpd-vhost.confphp
[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ... ErrorLog "logs/111.com-error_log" # SetEnvIf行设置img知足URI匹配.gif等的状况,配合env=!img排除特定类型文件的错误日志记录。 SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI ".*\.jpg$" img SetEnvIf Request_URI ".*\.png$" img SetEnvIf Request_URI ".*\.bmp$" img SetEnvIf Request_URI ".*\.swf$" img SetEnvIf Request_URI ".*\.js$" img SetEnvIf Request_URI ".*\.css$" img CustomLog "logs/111.com-access_log" combined env=!img ... # 重启服务,使配置生效 [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful
# 访问包含.jpg等的路径,访问日志不会记录;访问其余则被记录 [root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I HTTP/1.1 200 OK Date: ..., ... 11:19:25 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 Last-Modified: ..., ... 11:19:21 GMT ETag: "2-560d7df2b9966" Accept-Ranges: bytes Content-Length: 2 Content-Type: image/jpeg #未记录匹配到的jpg文件访问记录! [root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log ... // 没有最新的访问图片的记录 192.168.65.133 - - [...:19:17:32 +0800] "HEAD HTTP://111.com/111.php HTTP/1.1" 200 - "-" "curl/7.29.0"
将env!=img去掉(记得重启服务!!),看是否会记录css
# 修改配置并重启访问 [root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful # 从新测试 [root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I HTTP/1.1 200 OK Date: ..., ... 11:22:38 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 Last-Modified: ..., ... 11:19:21 GMT ETag: "2-560d7df2b9966" Accept-Ranges: bytes Content-Length: 2 Content-Type: image/jpeg # 查看是否记录 [root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log ... # 访问jpg文件信息被记录 192.168.65.133 - - [...:19:22:38 +0800] "HEAD HTTP://111.com/111.jpg HTTP/1.1" 200 - "-" "curl/7.29.0"
就算不记录某些无效信息,随之服务器的运行,访问日志文件大小也将会不断变大,经过设置日志文件自动切割以及一段时间后删除旧的日志就变得较为必要。html
修改虚拟主机配置文件java
[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ... # /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具 # -l参数按当前系统时间为基准进行切割(我国为CST) # %Y%m%d表示年月日,这样会天天记录一个带日期的日志文件,更方便 # 86400(s)表示天天都进行切割 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img # 使用"|$"替代"|"来调用shell执行,默认是不会调用shell的 # CustomLog "|$/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img ... [root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful
查看是否生成新格式的日志文件shell
[root@localhost ~]# curl -x 127.0.0.1:80 111.com/111.php abc.com # logs目录下已经产生当天格式的访问日志 [root@localhost ~]# ls /usr/local/apache2.4/logs/ 111.com-access_log abc.com-access_log error_log 111.com-error_log abc.com-error_log httpd.pid 111.com-access_20171221_log access_log
若是想按期删除老日志,能够配合cron命令,能够实现。apache
[root@localhost ~]# crontab -e # 每个月1号删除15天之前的全部带日期的日志文件 0 0 1 * * /usr/bin/find /usr/local/apache2.4/logs/ -regex ".*/.*-access_.*_log" -mtime +15 -exec rm -f {} \;
说明:因为find目录查找文件显示为绝对路径,使用正则来匹配时不能只单单匹配文件名,还须要匹配其以前的路径,这里使用了-regex
这个不经常使用的参数。vim
详细说明参见:http://blog.csdn.net/lee244868149/article/details/43406335浏览器
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次访问时就不用再次获取,直接就能够使用,能够节省带宽资源。缓存
当状态码为304时,浏览器将不会向服务器获取已缓存的文件。
先在主配置文件内开启expires模块
[root@localhost logs]# vim /usr/local/apache2.4/conf/httpd.conf // 添加expire模块,删除行首的# #LoadModule expires_module modules/mod_expires.so // 查看expire模块是否已加载,没有的话要修改httpd.conf文件去加载 [root@localhost logs]# /usr/local/apache2.4/bin/apachectl -M | grep expire expires_module (shared)
在虚拟主机配置文件内增长以下配置
[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ... <IfModule mod_expires.c> # 打开该功能的开关 ExpiresActive on # 按文件类型来设置自定义过时时间 # acess表示从访问时间开始 # now表示按当前时间开始 # plus在前面的时间基础上加上 # 1 hours/days 表示文件的生命周期 # 例如 acess plus 1 days 表示该文件从访问的时间开始1天内有效,无需从新获取 ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" # 其余表示方法 # A:客户端访问时间 # M: 文件最后修改的时间 ExpiresByType img/bmp A2592000 ExpiresByType text/html M604800 # 除上述外的文件指定默认的过时时间 ExpiresDefault "now plus 0 min" </IfModule> ...
从新加载配置文件
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful
# # 设置后的状态信息中出现Cache-Control、Expires等信息 [root@localhost 111.com]# curl -x 192.168.65.133:80 111.com/lvm.png -I HTTP/1.1 200 OK Date: ..., ... 13:22:07 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 Last-Modified: ..., ... 13:48:33 GMT ETag: "23e28-55cec20a0ce40" Accept-Ranges: bytes Content-Length: 146984 Cache-Control: max-age=86400 //该时间等于Expires-Date Expires: ..., ... 13:22:07 GMT // 改行显示了文件的过时时间 Content-Type: image/png
# 默认文件访问后立刻过时,max-age为0 [root@localhost ~]# curl -x 127.0.0.1:80 abc.com/abc.php -I HTTP/1.1 200 OK Date: ..., ... 12:03:44 GMT Server: Apache/2.4.28 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Cache-Control: max-age=0 Expires: ..., ... 12:03:44 GMT Content-Type: text/html; charset=UTF-8