通路日志不記錄靜态檔案
當通路很多圖檔,文檔等靜态資源的時候,會加大你日志的容量,日志容量占用你磁盤空間後,會出現伺服器當機等很嚴重的問題,這時需要将日志進行配置優化。當通路網頁時不記錄這些圖檔、css、js等資訊日志。
1、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com www.example.com
php_admin_flag short_open_tag on
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</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
#以上都被标記為img變量;(.gif/.jpg)結尾的;env=!img:這個表示被記錄在日志中
CustomLog "logs/111.com-access_log" combined env=!img
</VirtualHost>
2、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful
<a href="https://s3.51cto.com/oss/201711/10/ded00e66c0799074a5613402e88822e2.png-wh_500x0-wm_3-wmp_4-s_1973458212.png" target="_blank"></a>
<a href="https://s5.51cto.com/oss/201711/10/8058ca89038aabba8e1123eaa22f7f6e.png-wh_500x0-wm_3-wmp_4-s_135037276.png" target="_blank"></a>
擴充:
我的需求是,把類似請求 www.aaa.com/aaa/... 這樣的請求才記錄日志。
在httpd.conf 或者 相關的虛拟主機配置檔案中添加
SetEnvIf Request_URI "^/aaa/.*" aaa-request
CustomLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/aaa-access_%Y%m%d.log 86400" combined env=aaa-request
這樣就可以了。這個原理和不記錄圖檔等靜态通路的日志是一樣的。
通路日志切割
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
#-l:以标準時間計算
#使用rotatelogs切割,按86400秒計算(就是一天的時間切割)
#按每小時 3600秒
3、看下日志:
4、使用cronolog方式來切割
每一天建立一個新日志
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
每小時建立一個新日志
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
選項
-l
使用本地時間代替GMT時間作為時間基準。注意:在一個改變GMT偏移量(比如夏令時)的環境中使用-l會導緻不可預料的結果。是以一定要加上-l 否則出現的日志時間和實際時間是相差8小時的。
logfile
它加上基準名就是日志檔案名。如果logfile中包含”%”,則它會被視為用于strftime()的格式字元串;否則它會被自動加上以秒為機關的”.nnnnnnnnnn”字尾。這兩種格式都表示新的日志開始使用的時間。
rotationtime
日志檔案滾動的以秒為機關的間隔時間。
offset
相對于UTC的時差的分鐘數。如果省略,則假定為”0″并使用UTC時間。比如,要指定UTC時差為”-5小時”的地區的當地時間,則此參數應為”-300″。
filesizeM
指定以filesizeM檔案大小滾動,而不是按照時間或時差滾動。
靜态元素過期時間
當第一次通路網頁時,浏覽器自動将靜态的元素緩存到你的電腦上(如靜态圖檔資源),第二次通路則不用去伺服器上擷取,直接在本機電腦上擷取緩存,好處:節省了伺服器帶寬,加速使用者通路;缺點:當伺服器靜态資源更新了,你的本機電腦還在擷取之前的緩存,而不是最新的資源,這時使用者檢視就出錯,就需要設定下過期時間
1、通路http://111.com/3.png時,出現304表示直接在緩存上擷取
<a href="https://s4.51cto.com/oss/201711/10/6ad9282a6de510d07d3eb6a06ff8cbd4.png-wh_500x0-wm_3-wmp_4-s_1447691166.png" target="_blank"></a>
2、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/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 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"
#以上是定義不同類型的檔案緩存的時間
3、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful
4、配置Apache,加載expires子產品
添加如下内容
[root@centos7 111.com]# vi /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so
[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires
expires_module (shared)
檢測:
<a href="https://s5.51cto.com/oss/201711/10/5a0c7d36967b967628f979e771da53f8.png-wh_500x0-wm_3-wmp_4-s_833983427.png" target="_blank"></a>
[root@centos7 111.com]# curl -x127.0.0.1:80 111.com/3.png -I
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2017 12:02:48 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Last-Modified: Thu, 09 Nov 2017 12:02:48 GMT
ETag: W/"a102-55d97420ac440"
Accept-Ranges: bytes
Content-Length: 41218
Cache-Control: max-age=86400
Expires: Fri, 10 Nov 2017 12:02:48 GMT
Content-Type: image/png
本文轉自 iekegz 51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/1980576,如需轉載請自行聯系原作者