LAMP架構(六)之日誌切割和靜態元素

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

輸入圖片說明

相關文章
相關標籤/搜索