四十二、訪問日誌不記錄靜態文件、訪問日誌切割、靜態元素過期時間
訪問日誌:可以記錄網站的訪問情況,還可以在網站有異常發生時幫助我們定位問題,比如當有攻擊時,是可以通過查看日誌看到一些規律的。
靜態元素:一個網站有很多元素,比如圖片、js、css等靜態文件,這些就是靜態元素。QQ瀏覽器,按F12可以查看它的靜態元素,Network。
要配置httpd訪問日誌,首先需要虛擬主機配置文件中定義訪問日誌的格式,打開虛擬主機配置文件:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
</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
CustomLog "logs/111.com-access_log" combined env=!img
格式定義在訪問日誌customlog的上面。
img:標簽,標記。img除外的都記錄進來。這些以gif、jpg等結尾的做個標記叫img。這個標簽名字隨意,叫abc也行。
解析:SetEnvIf Request_URI ".*\.gif$" img
如果訪問的Request_URI,除gif結尾的img的都記錄進來。
解析:env=!img
上面的以img都不會記錄到日誌裏,排除這些img。
# /usr/local/apache2.4/bin/apachectl graceful
# curl -x192.168.93.130:80 111.com/lsjdlf.jpg1 -I
# curl -x192.168.93.130:80 111.com/lsjdlf.jpg -I
# tail -3 /usr/local/apache2.4/logs/111.com-access_log
192.168.93.130 - - [14/Apr/2018:17:33:04 +0800] "HEAD HTTP://111.com/lsjdlf.jpg1 HTTP/1.1" 404 - "-" "curl/7.29.0" 只記錄了jpg1。
平時我們看日誌看的是請求過哪個頁面,而不是這些圖片,所有有必要做一個限制。
二、訪問日誌切割
每天有必要把日誌做切割。
切割作用:防止磁盤寫滿,日後查看數據也方便查看。
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
rotatelogs:Apache自帶的一個日誌切割工具。
-l:讓它以當前系統的時間為基準,如果不指定-l,就會以UTC格式,中國是CST,美國是UTC。
%Y%m%d:年月日。時間段是一天,換算成秒是86400秒。
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
此時再訪問這個虛擬主機就會生成對應日期的訪問日誌。
# ls
111.com-access_20180414.log 111.com-error_log abc.com-error_log error_log
111.com-access_log abc.com-access_log access_log httpd.pid
三、配置靜態元素過期時間
304狀態碼:代表你所下載的東西已經緩存到本地了,不用再到服務器去下載,可以節省帶寬,但是沒有規定什麽時候把緩存清理掉。
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModUle mod_expires.c> //模塊名:expires
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>
定義它們的過期時間。
# vim /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so打開這個模塊
# /usr/local/apache2.4/bin/apachectl graceful
Ctrl+F5:強制刷新,把本地的緩存清空。
# curl -x 127.0.0.1:80 111.com/lb.jpg -I
HTTP/1.1 200 OK
Date: Sat, 14 Apr 2018 15:42:58 GMT 當前時間
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Tue, 20 Feb 2018 04:04:27 GMT
ETag: "5607b-5659ce81be8c0"
Accept-Ranges: bytes
Content-Length: 352379
Cache-Control: max-age=86400
Expires: Sun, 15 Apr 2018 15:42:58 GMT 過期時間和當前時間差24小時
Content-Type: image/jpe
如果不設置加載這個模塊就不會有過期時間這一行,一般都會設置這個。
擴展
apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960
apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981
apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037
apache 日誌切割問題 http://ask.apelearn.com/question/566
四十二、訪問日誌不記錄靜態文件、訪問日誌切割、靜態元素過期時間