LAMP架構(apache訪問日誌不記錄靜態文件,靜態元素過期時間,apache日誌切割)
瀏覽器打開後按f12會會出現一個界面,點network,會出現很多請求,訪問日誌裏會記載,有些靜態的圖片或者文件也會記載,太浪費磁盤空間和磁盤io。所以我們要讓日誌不記錄靜態文件
[root@abc ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
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
定義這些以gif.jgp,png,bmp.swf.js.css結尾的文件為env。
在CustomLog "logs/111.com-access_log" combined 這一行的最後加上env=!img,表示把除了img的文件記錄到日誌裏。
檢查語法錯誤並退出。
實驗:
curl -x127.0.0.1:80 111.com/sadaddas.png1
curl -x127.0.0.1:80 111.com/sadaddas.png
訪問png1和png兩個文件,看看日誌會記錄哪個?
結果為:png不會被記錄,png1會被記錄,
或者上傳一張以png結尾的圖片在目錄裏,用瀏覽器訪問,結果還是沒有日誌
二、apache訪問日誌切割
日誌一直記錄總有一天會把整個磁盤沾滿,所以有必要讓它自動切割,並刪除老的日誌文件。保證磁盤永遠寫不滿,且更方便的管理日誌
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改 ustomLog "logs/111.com-access_log" combined env=!img 為:
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_log" combined env=!img
rotatelogs是apache自帶的日誌切割工具。-l是為了讓它以當前系統時間為準,如果不指定。他會以utc時間為基準。
而且根據時間日期還要讓他文件有不同的名字。修改111.com-access_log為111.com-access%Y%m%d.log
%Y%m%d分別表示年月日.
還要規定什麽時間去切割。一天是86400秒,日誌名後面加上86400
檢查語法錯誤並退出。
實驗:
訪問一個不是靜態文件的網址內容
[root@abc ~]# curl -x127.0.0.1:80 111.com/dsd.png1
發現日誌目錄裏多了一個以當天時間為名的日誌文件,裏面記錄的則是剛Curl的
[root@abc ~]# ls /usr/local/apache2.4/logs/
111.com-access20171126.log 111.com-access_log 111.com-error_log abc.com abc.com-access_log access_log error_log httpd.pid
[root@abc ~]# cat /usr/local/apache2.4/logs/111.com-access20171126.log
127.0.0.1 - - [26/Nov/2017:15:28:31 +0800] "GET HTTP://111.com/dsd.png1 HTTP/1.1" 404 206 "-" "curl/7.29.0"
三、靜態元素過期時間
配置靜態文件元素過期時間
瀏覽器訪問網站圖片時會把靜態文件緩存在本地電腦裏。這樣下次訪問就不用再去遠程下載了。
實驗:
可以在目錄裏放一個圖片,然後用瀏覽器去訪問,且訪問之前先F12打開管理頁面,點開Network
可以發現,第一次訪問時,狀態碼為200,表示正正常
第二次訪問時,狀態碼為304 Not Modified 表示本地有緩存,且沒有修改,所以不需要從新下載。
這樣可以節省帶寬,但是沒有規定失效日期且什麽時候清理緩存。
修改:
vim /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"
</IfModule>
expire是apache的一個模塊。設置過期時間
檢查apache有沒有這個模塊
[root@abc ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
如果沒有,則需要到主配置文件裏修改
搜索expire
在109行,把前面的註釋符去掉
保存退出
檢查語法錯誤並重啟服務
[root@abc ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
expires_module (shared)
apache加載了這個模塊。
實驗:
ctrl+f5可以強制刷新,把本地緩存清空
再訪問圖片是狀態碼顯示為200,且下面有cache-control,過期時間為86400秒,也就是一天,還會告訴你過期日期的時間expires,但是時區是GMT.
[root@abc 111.com]# curl -x127.0.0.1:80 111.com/1.png -I
HTTP/1.1 200 OK
Date: Sun, 26 Nov 2017 08:04:11 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: Sun, 26 Nov 2017 07:07:52 GMT
ETag: "7913-55edd71b4a200"
Accept-Ranges: bytes
Content-Length: 30995
Cache-Control: max-age=86400
Expires: Mon, 27 Nov 2017 08:04:11 GMT
Content-Type: image/png
LAMP架構(apache訪問日誌不記錄靜態文件,靜態元素過期時間,apache日誌切割)