httpd静态文件缓存和日志不记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd静态文件缓存和日志不记录相关的知识,希望对你有一定的参考价值。
httpd不记录指定元素的访问日志
在访问一个web页面时,httpd会记录这个页面中的图片、js/css页面或视频访问一类的记录信息,并把这些信息存储到日志当中,记录日志是非常详细的,但是日志大小会增长的非常快,因为每一次访问请求就有可能记录上百条日志信息,而这些日志信息又是没有用的,所以我们需要让httpd不去记录访问产生的某些日志记录信息
配置在日志记录的配置项下,对图片和css/js的访问不做日志记录,这里是记录在虚拟主机配置文件中,如果是在主配置文件中配置,也是配置在指定日志的路径的配置下面
[[email protected] local]# vim httpd/conf/extra/httpd-vhosts.conf
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*.gif$" imges
? SetEnvIf Request_URI ".*.jpg$" imges
? SetEnvIf Request_URI ".*.png$" imges
? SetEnvIf Request_URI ".*.bmp$" imges
? SetEnvIf Request_URI ".*.swf$" imges
? SetEnvIf Request_URI ".*.js$" imges
? SetEnvIf Request_URI ".*.css$" imges
? CustomLog "logs/123.com-access_log" combined env=!imges
</VirtualHost>
检查配置文件的正确性
[[email protected] local]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[[email protected] local]# /usr/local/httpd/bin/apachectl graceful
我们需要在虚拟主机的一个网页根目录添加一个图片,然后用浏览器访问这个图片,观察日志中是否记录访问这个图片的信息,在/usr/local/httpd/docs/123.com/目录下使用rz命令上传一个图片,然后访问该域名并在后面添加上图片名称,如www.123.com/girl.png
[[email protected] local]# vim httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
? DocumentRoot "/usr/local/httpd/docs/123.com"
? ServerName 123.com
? ServerAlias www.123.com
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*.gif$" imges
? SetEnvIf Request_URI ".*.jpg$" imges
? SetEnvIf Request_URI ".*.png$" imges
? SetEnvIf Request_URI ".*.bmp$" imges
? SetEnvIf Request_URI ".*.swf$" imges
? SetEnvIf Request_URI ".*.js$" imges
? SetEnvIf Request_URI ".*.css$" imges
? CustomLog "logs/123.com-access_log" combined env=!imges
</VirtualHost>
测试部分
不记录的配置都写入后,首先让配置不生效,注释掉env=!imges ?(imges这里是自定义名称,引用的是上面配置的一个字表变量),graceful重新生效一下,然后观察下访问是否记录日志
记录访问小文件的信息配置:
使用tail -f动态显示日志产生的记录,多次刷新访问查看记录信息
[[email protected] extra]# tail -f /usr/local/httpd/logs/123.com-access_log
192.168.1.112 - - [30/Jul/2018:09:38:10 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
192.168.1.112 - - [30/Jul/2018:09:43:27 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
去掉注释加入env=!imges的配置后再次请求这个图片,日志信息则不再增加,日志不再记录小文件的访问信息
----------------部分配置---------------------
# AuthUserFile /usr/local/httpd/conf/htpasswd
# require valid-user
# </Directory>
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*.gif$" imges
? SetEnvIf Request_URI ".*.jpg$" imges
? SetEnvIf Request_URI ".*.png$" imges
? SetEnvIf Request_URI ".*.bmp$" imges
? SetEnvIf Request_URI ".*.swf$" imges
? SetEnvIf Request_URI ".*.js$" imges
? SetEnvIf Request_URI ".*.css$" imges
? CustomLog "logs/123.com-access_log" combined env=!imges
</VirtualHost>
[[email protected] extra]# /usr/local/httpd/bin/apachectl graceful
[[email protected] extra]# tail -f /usr/local/httpd/logs/123.com-access_log
192.168.1.112 - - [30/Jul/2018:09:38:10 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
192.168.1.112 - - [30/Jul/2018:09:43:27 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
httpd访问日志切割
httpd对每日产生的日志进行切割,切割的日志可以以自定义多长时间来进行切割,切割可以引用时间戳来作为命名
[[email protected] extra]# tail -n 15 httpd-vhosts.conf
# require valid-user
# </Directory>
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*.gif$" imges
? SetEnvIf Request_URI ".*.jpg$" imges
? SetEnvIf Request_URI ".*.png$" imges
? SetEnvIf Request_URI ".*.bmp$" imges
? SetEnvIf Request_URI ".*.swf$" imges
? SetEnvIf Request_URI ".*.js$" imges
? SetEnvIf Request_URI ".*.css$" imges
? CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/123.com-access_%Y%mYdlog 86400" combined env=!imges
</VirtualHost>
[[email protected] extra]# /usr/local/httpd/bin/apachectl -t
Syntax OK
配置说明:
/usr/local/httpd/bin/rotatelogs ? 这个是apache自带的一个切割工具,可以以时间戳来命名日志文件,日志文件可以分时段进行切割
切割的日志会分日期保存在日志目录下,但是这些日志不会自动被删除,需要写入任务计划或者脚本中定期执行,删除指定时间的日志其主要命令如下:
find /usr/local/httpd/logs/ ?-mtime +15 f -name *.log -exec rm -rf {} ?;?
浏览器缓存静态元素文件
浏览器访问网站时会下载例如gif、jpg、javascript的静态文件,当用户每次访问时都会从服务器下载这些文件,当这些文件服务器端没有变化的时候,用户每次访问都会重新下载一遍这些文件,就没必要每次都从服务器端拉取这些短时间不变化的文件,配置服务端让这些文件在用户的浏览器中保留一段时间,过了这段时间再次从服务器端下载
配置/usr/local/httpd/conf/extra/httpd-vhosts.conf虚拟主机配置文件,添加以下的模块配置
[[email protected] extra]# vim httpd-vhosts.conf
<IfModule mod_expires.c>
? ExpiresActive on #打开缓存功能
? 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"
? ExpiresDefault "now puls 0 min"
</IfModule>
ExpiresActuve ?on ?打开浏览器缓存静态文件功能
ExpiresByType image/gifjpegpngcss ? ?让浏览器缓存这些类型的静态文件
ExpiresByType application/x-javascript ? 缓存javascript的静态网页文件
ExpiresDefault ? 其他元素的文件一律不缓存
在httpd.conf中打开expires的模块
[[email protected] extra]# vim /usr/local/httpd/conf/httpd.conf
---------------------------------------------------
LoadModule expires_module modules/mod_expires.so
重新加载httpd的配置
[[email protected] extra]# /usr/local/httpd/bin/apachectl graceful
[[email protected] extra]# /usr/local/httpd/bin/apachectl -M |grep expires
expires_module (shared)
在浏览器中第一次访问web中的查看用户端的访问状态码为200,第二次访问的状态码则是304,304状态码表示该文件已经缓存到用户浏览器中
服务器端查看访问的状态,其中Cache-control表示缓存86400秒,也就是该图片在用户浏览器缓存数据中会保留一天的时间,这一天内访问这个网站时都不会去从服务器下载该图片文件
[[email protected] 123.com]# curl -x127.0.0.1:80 123.com/girl.png -I
HTTP/1.1 200 OK
Date: Mon, 30 Jul 2018 05:24:44 GMT
Server: Apache/2.4.33 (Unix) php/5.6.37
Last-Modified: Mon, 30 Jul 2018 05:24:44 GMT
ETag: W/"4733a2-57247be175d40"
Accept-Ranges: bytes
Content-Length: 4666274
Cache-Control: max-age=86400
Expires: Tue, 31 Jul 2018 05:24:44 GMT
Content-Type: image/png
以上是关于httpd静态文件缓存和日志不记录的主要内容,如果未能解决你的问题,请参考以下文章
lamp-日志设置(访问日志切割不记录静态文件日志缓存文件过期时间)
Nginx的访问日志Nginx的日志切割Nginx静态文件不记录日志和过期时间