一, 访问日志不记录静态文件
访问日志: 可以记录网站的访问情况, 还可以在网站有异常发生时帮助我们定位问题, 比如当有攻击时, 是可以通过查看日志看到一些规律的.
静态元素: 一个网站有很多元素, 比如图片, js,CSS 等静态文件, 这些就是静态元素. QQ 浏览器, 按 F12 可以查看它的静态元素, Network.
要配置 httpd 访问日志, 首先需要虚拟主机配置文件中定义访问日志的格式, 打开虚拟主机配置文件:
- # vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- </IFModule>
- ErrorLog "logs/111.com-error_log"
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
格式定义在访问日志 customlog 的上面.
img: 标签, 标记. img 除外的都记录进来. 这些以 gif,jpg 等结尾的做个标记叫 img. 这个标签名字随意, 叫 abc 也行.
解析: SetEnvIf Request_URI ".*\.gif$" img
如果访问的 Request_URI, 除 gif 结尾的 img 的都记录进来.
解析: env=!img
上面的以 img 都不会记录到日志里, 排除这些 img.
- # /usr/local/apache2.4/bin/apachectl graceful
- # curl -x192.168.93.130:80 111.com/lsjdlf.jpg1 -I
- # curl -x192.168.93.130:80 111.com/lsjdlf.jpg -I
- # tail -3 /usr/local/apache2.4/logs/111.com-access_log
192.168.93.130 - - [14/Apr/2018:17:33:04 +0800] "HEAD HTTP://111.com/lsjdlf.jpg1 HTTP/1.1" 404 - "-" "curl/7.29.0" 只记录了 jpg1.
平时我们看日志看的是请求过哪个页面, 而不是这些图片, 所有有必要做一个限制.
二, 访问日志切割
每天有必要把日志做切割.
切割作用: 防止磁盘写满, 日后查看数据也方便查看.
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
rotatelogs:Apache 自带的一个日志切割工具.
-l: 让它以当前系统的时间为基准, 如果不指定 - l, 就会以 UTC 格式, 中国是 CST, 美国是 UTC.
%Y%m%d: 年月日. 时间段是一天, 换算成秒是 86400 秒.
- # /usr/local/apache2.4/bin/apachectl -t
- # /usr/local/apache2.4/bin/apachectl graceful
此时再访问这个虚拟主机就会生成对应日期的访问日志.
# ls
111.com-access_20180414.log 111.com-error_log abc.com-error_log error_log
111.com-access_log abc.com-access_log access_log httpd.pid
三, 配置静态元素过期时间
304 状态码: 代表你所下载的东西已经缓存到本地了, 不用再到服务器去下载, 可以节省带宽, 但是没有规定什么时候把缓存清理掉.
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModUle mod_expires.c> // 模块名: expires
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 hour"
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 plus 0 min"
</IfModule>
定义它们的过期时间.
# vim /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so 打开这个模块
# /usr/local/apache2.4/bin/apachectl graceful
Ctrl+F5: 强制刷新, 把本地的缓存清空.
- # curl -x 127.0.0.1:80 111.com/lb.jpg -I
- HTTP/1.1 200 OK
Date: Sat, 14 Apr 2018 15:42:58 GMT 当前时间
- Server: Apache/2.4.33 (Unix) PHP/7.1.6
- Last-Modified: Tue, 20 Feb 2018 04:04:27 GMT
- ETag: "5607b-5659ce81be8c0"
- Accept-Ranges: bytes
- Content-Length: 352379
- Cache-Control: max-age=86400
Expires: Sun, 15 Apr 2018 15:42:58 GMT 过期时间和当前时间差 24 小时
Content-Type: image/jpe
如果不设置加载这个模块就不会有过期时间这一行, 一般都会设置这个.
扩展
apache 日志记录代理 IP 以及真实客户端 IP http://ask.apelearn.com/question/960
apache 只记录指定 URI 的日志 http://ask.apelearn.com/question/981
apache 日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566
来源: http://www.bubuko.com/infodetail-2563919.html