Apache訪問日誌不記錄靜態文件 網站大多元素爲靜態文件,如圖片、css、js等,這些元素能夠不用記錄 把虛擬主機配置文件改爲以下:javascript
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com"; ServerName www.123.com ServerAlias 123.com 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/123.com-access_log" combined env=!img </VirtualHost>
從新加載配置文件 -t, gracefulcss
/usr/local/apache2.4/bin/apachectl -t /usr/local/apache2.4/bin/apachectl graceful mkdir /data/wwwroot/www.123.com/images //建立目錄,並在這目錄下上傳一個圖片 curl -x127.0.0.1:80 -I 123.com/images/123.jpg //-I參數,只顯示狀態碼不顯示內容。 tail /usr/local/apache2.4/logs/123.com-access_log
若是不限制,每次請求靜態圖片,文件等會消耗日誌的存儲空間,不利於查看日誌排查問題。html
擴展 apache只記錄指定URI的日誌 個人需求是,把相似請求 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 這樣就能夠了。這個原理和不記錄圖片等靜態訪問的日誌(http://www.lishiming.net/thread-561-1-1.html)是同樣的。java
訪問日誌切割apache
日誌一直記錄總有一天會把整個磁盤佔滿,因此有必要讓它自動切割,並刪除老的日誌文件 把虛擬主機配置文件改爲以下:瀏覽器
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com"; ServerName www.123.com ServerAlias 123.com 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 "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img </VirtualHost>
從新加載配置文件 -t, graceful ls /usr/local/apache2.4/logs緩存
中國的時區是CST,加-l參數,美國的時區是HTC。此外須要作個任務計劃,把超過2個月日誌刪除掉。app
apache的日誌是能夠自動切割的。curl
方法一: 使用 cronolog 爲每一天創建一個新的日誌測試
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
也能夠按小時
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined
方法二:使用 rotatelogs 每一天記錄一個日誌
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
每小時
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d%H.log 3600" combined
再看apache rotatelogs語法
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文件大小滾動,而不是按照時間或時差滾動。
Apache之靜態元素過時
瀏覽器訪問網站的圖片時會把靜態的文件緩存在本地電腦裏,這時候的狀態碼是200,這樣下次再訪問時就不用去遠程下載了,這個時候的狀態碼是304. 增長配置
<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" </IfModule>
查看expires_module模塊是否打開。 /usr/local/apache2.4/bin/apachectl -M | grep expire 須要expires_module模塊支持:編輯主配置文件,去掉該模塊的井號,保存退出並,
從新加載下配置文件:
/usr/local/apache2.4/bin/apachectl -t /usr/local/apache2.4/bin/apachectl graceful curl測試,看cache-control: max-age ctrl + F5 能夠強制刷新瀏覽器,清空緩存。 Cache-Control:max-age=86400 //緩存過時時間,單位秒 Expires:Fri, 15 Dec 2017 00:36:33 GMT //過時的日期,時區是GMT