httpd静态文件缓存和日志不记录

httpd不记录指定元素的访问日志

在访问一个web页面时,httpd会记录这个页面中的图片、js/css页面或视频访问一类的记录信息,并把这些信息存储到日志当中,记录日志是非常详细的,但是日志大小会增长的非常快,因为每一次访问请求就有可能记录上百条日志信息,而这些日志信息又是没有用的,所以我们需要让httpd不去记录访问产生的某些日志记录信息
配置在日志记录的配置项下,对图片和css/js的访问不做日志记录,这里是记录在虚拟主机配置文件中,如果是在主配置文件中配置,也是配置在指定日志的路径的配置下面

[root@www 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>

检查配置文件的正确性

[root@www local]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@www local]# /usr/local/httpd/bin/apachectl graceful

我们需要在虚拟主机的一个网页根目录添加一个图片,然后用浏览器访问这个图片,观察日志中是否记录访问这个图片的信息,在/usr/local/httpd/docs/123.com/目录下使用rz命令上传一个图片,然后访问该域名并在后面添加上图片名称,如www.123.com/girl.png

[root@www 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动态显示日志产生的记录,多次刷新访问查看记录信息

[root@www 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>
[root@www extra]# /usr/local/httpd/bin/apachectl graceful
[root@www 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对每日产生的日志进行切割,切割的日志可以以自定义多长时间来进行切割,切割可以引用时间戳来作为命名

[root@www 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>
[root@www 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虚拟主机配置文件,添加以下的模块配置

[root@www 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/gif\jpeg\png\css    让浏览器缓存这些类型的静态文件
ExpiresByType application/x-javascript   缓存javascript的静态网页文件
ExpiresDefault   其他元素的文件一律不缓存

在httpd.conf中打开expires的模块

[root@www extra]# vim /usr/local/httpd/conf/httpd.conf
---------------------------------------------------
LoadModule expires_module modules/mod_expires.so

重新加载httpd的配置

[root@www extra]# /usr/local/httpd/bin/apachectl graceful
[root@www extra]# /usr/local/httpd/bin/apachectl -M |grep expires
 expires_module (shared)

在浏览器中第一次访问web中的查看用户端的访问状态码为200,第二次访问的状态码则是304,304状态码表示该文件已经缓存到用户浏览器中
服务器端查看访问的状态,其中Cache-control表示缓存86400秒,也就是该图片在用户浏览器缓存数据中会保留一天的时间,这一天内访问这个网站时都不会去从服务器下载该图片文件

[root@www 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

猜你喜欢

转载自blog.51cto.com/8844414/2154863
今日推荐