1. 程式人生 > >訪問日誌不記錄靜態文件、配置訪問日誌切割、配置靜態元素過期時間

訪問日誌不記錄靜態文件、配置訪問日誌切割、配置靜態元素過期時間

Linux

訪問日誌不記錄指定類型的文件

一個網站會有很多元素,尤其是圖片、js、css等靜態的文件非常多,用戶每請求一個頁面就會訪問諸多的圖片、js等靜態元素,這些元素的請求都會被記錄在日誌中。如果一個站點訪問量很大,那麽訪問日誌文件增長會非常快,這不僅對於服務器的磁盤空間造成影響,更重要的是會影響磁盤的讀寫速度。實際上這些巨量的靜態元素請求記錄到日誌裏的意義並不大,所以可以限制這些靜態元素去記錄日誌,並且需要把日誌按天歸檔,一天一個日誌,這樣也可以防止單個日誌文件過大。

編輯虛擬主機配置文件
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
    CustomLog "logs/mm.com-access_log" combined env=!img

技術分享圖片

SetEnvIf 設置匹配條件
img 定義的別名
env=!img 排除別名是ima的項
先定義一個img環境變量,把gif、jpg、png、bmp、swf、js、css等格式的文件全部歸類到img裏,後面的env=!imge有用到一個“!”,這相當於取反了,意思是把img以外的類型文件記錄到日誌裏。

配置完成後需要檢查配置文件以及重新加載配置文件才會生效
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

我們訪問一個.jpg文件,看日誌會不會進行記錄

curl -x192.168.71.131:80 -I 521.com/ai.jpg
tail /usr/local/apache2.4/logs/mm.com-access_log

技術分享圖片

可以看到我們訪問.jpg時,日誌是不會記錄的

我們再隨便訪問一個沒有添加進去的格式文件,比如.jpga(隨便填的),看看有沒有日誌信息

技術分享圖片

可以看到有日誌有訪問記錄


配置訪問日誌切割

Apache日誌一直記錄總有一天會把整個磁盤占滿,所以有必要讓它自動切割,並刪除老的日誌文件

編輯虛擬主機配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

編輯Customlog這一行進行編輯
CustomLog "|/usr/local/apache.2.4/bin/rotatelogs -l logs/mm.com-access_log_%Y%m%d.log 86400" combined env=!img

/usr/local/apache2.4/bin/rotatelogs 這時apache自帶的一個日誌切割文件
-l 表示按照本機時間進行,如果不加那麽表示使用UTC時間,中國使用的是CST時間
%Y%m%d.log 表示年月日,日誌切割的時候後綴名會加上年月日,
86400 表示每過86400秒就切割一次,86400就是一天的時間

技術分享圖片

檢查配置是否正確,重新加載apache配置(一定要養成這個好習慣)
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

技術分享圖片

設置完日誌切割後,記得添加一個任務計劃,多久刪除一下以前的日誌,不然我們日誌切割防止磁盤寫滿就沒意義了


靜態元素過期時間

我們知道在使用瀏覽器瀏覽網頁時,瀏覽器會把網頁資料快取(Cache)下來儲存在本機端,用以加快下回瀏覽相同網頁時不必再重新由網站上下載,進 而有加速的效果.使用mod_expires模組來加速網頁瀏覽,這裏所謂的”加速”,其實是利用”mod_expires”的功能,來設定網頁文件的過 期時間,加長網頁文件被瀏覽器快取(Cache)保存的時間.如此一來,只要網頁文件的過期時間未到,瀏覽器就會引用快取的資料,而不用花時間再去下載網 站上的資料.另一方面帶給站長的好處是,可以減少瀏覽者對網站的流量耗用(例如有些虛擬主機有限制網站可使用的流量)

編輯虛擬主機配置文件
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>

    內容說明:

使用<IfModule></IfModule>來包夾指令可以避免在mod_expires模組沒有啟用的情況下還去執行.如果mod_expires模組確定已經啟用,那不寫<IfModule></IfModule>也沒關係.
ExpiresActive on: 啟用mod_expires功能,相對的Off就是關閉功能
ExpiresByType : ExpiresByType指令是依照不同的網頁文件型態來做過期時間設定
access : 過期起算時間有三種,分別是access、now 以及modification.其中access與now意義相同,而modification指的是網頁文件的”最後編輯時間”.所以如果要以檔案的最 後編輯時間起算,可以寫成這樣,”modification plus 10 days”.而時間的指定也很簡單,就是英文單字(years、months、weeks、days、hours、minutes、seconds).例 如,可以寫成這樣,”access plus 1 month 15 days 2 hours”
ExpiresDefault: 表示其它的設置默認,不用管

檢查expire模塊是否打開,如果沒有打開需要在Apache主配置文件中開啟
檢查模塊是否加載
/usr/local/apache2.4/bin/apachectl -M |grep expire expires_module (shared)

如果模塊未加載,編輯主配置文件
vim /usr/local/apache2.4/conf/httpd.conf

搜索關鍵字:,找到這一行:
#LoadModule expires_module modules/mod_expires.so

去掉前面的# 保存即可

配置完成後需要檢查配置文件以及重新加載配置文件才會生效
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

訪問日誌不記錄靜態文件、配置訪問日誌切割、配置靜態元素過期時間