1. 程式人生 > 實用技巧 >5月30日

5月30日

11.22 訪問日誌不記錄靜態檔案

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

1. 修改虛擬主機配置檔案:(不記錄靜態檔案

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/111.com-access_log" combined env=!img

最終儲存配置:

blob.png

說明:先定義一個img環境變數,把gif、jpg、png、bmp、swf、js、css等格式的檔案全部歸類到img裡,後面的env=!imge有用到一個“!”,這相當於取反了,意思是把img以外的型別檔案記錄到日誌裡。

2. 更改配置檔案後要 重新檢查和載入配置檔案,

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

blob.png

3.測試配置是否成功

上傳圖片到對應的/data/wwwroot/abc.com/目錄

blob.png

3.1 先訪問一下abc.com 測試訪問靜態檔案是否會產生日誌

curl -x127.0.0.1:80 abc.com -I

tail /usr/local/apache2.4/logs/abc.com-access_log

blob.png

再訪問abc.com/linux.jpg,測試沒有產生日誌

curl -x127.0.0.1:80 abc.com/linux.jpg -I

tail /usr/local/apache2.4/logs/abc.com-access_log

blob.png

11.23 訪問日誌切割

日誌一直記錄總有一天會把整個磁碟佔滿,所以有必要讓它自動切割,並刪除老的日誌檔案,防止磁碟寫滿,用日期記錄日誌方便管理及查詢。還要寫一個任務計劃,定期清理超過時間的日誌。

1. 把虛擬主機配置檔案改成如下:

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

新增以下配置:

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img

blob.png

2.更改配置檔案後需要重新載入配置檔案:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

blob.png

3.測試檢視是否會生成帶日期的日誌

curl -x127.0.0.1:80 abc.com

ls /usr/local/apache2.4/logs/ (生成帶日期日誌)

blob.png

cat /usr/local/apache2.4/logs/abc.com-access_20180530.log //日誌檔案有記錄

blob.png

這裡的abc.com-access_20180530.log就是新生成的日誌,而且以後會每天生成一個按日期格式命名的日誌。

11.24 靜態元素過期時間

瀏覽器訪問網站的圖片時會把靜態的檔案快取在本地電腦裡,這樣下次再訪問時就不用去遠端下載了

在日誌裡會發現有一個狀態碼304,這個狀態碼錶示該檔案已經快取到使用者的電腦裡了(瀏覽器訪問網站的圖片時會把靜態的檔案快取在本地電腦裡),這樣下次再訪問時就不用去遠端下載了,而是直接訪問使用者電腦裡面的快取。這樣做的目的是降低伺服器的資源消耗,還可以提升使用者訪問網站的速度。那到低可以快取多久呢?如果伺服器上的某個圖片更改了,那麼應該訪問新的圖片才對,這就涉及一個靜態檔案快取時長的問題,也叫作快取過期時間

1. 把虛擬主機配置檔案改成如下:

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>

最終配置儲存:

blob.png

解釋說明:

這部分配置用到了mod_expires模組,相關配置內容並不難理解,通過字面也可以大致猜到其含義。這裡gif、jpeg、png格式的檔案過期時長為1天,css、js、flash格式的檔案過期時長為2小時,其他檔案過期時長為0,也就是不快取。

2. 檢視expires_module模組有沒有開啟:

/usr/local/apache2.4/bin/apachectl -M |grep expire

blob.png

2.1 沒有搜到expire模組,就去主配置檔案修改,將expire模組的#去掉

vim /usr/local/apache2.4/conf/httpd.conf

blob.png

3. 再重新檢測和載入:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

4.重新檢視模組是否生效:

/usr/local/apache2.4/bin/apachectl -M |grep expire

blob.png

5.curl來測試效果

curl -x127.0.0.1:80 abc.com/linux.jpg -I

blob.png

可以看到max-age=86400,這說明jpg的圖片將快取86400秒,也就是一天。

5.1用瀏覽器檢視測試,重新整理過後 狀態碼304 就是快取下來的圖片

blob.png



轉載於:https://blog.51cto.com/404006045/2122243