5月30日
一個網站會有很多元素,尤其是圖片、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
最終保存配置:
說明:先定義一個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
3.測試配置是否成功
上傳圖片到對應的/data/wwwroot/abc.com/目錄
3.1 先訪問一下abc.com 測試訪問靜態文件是否會產生日誌
curl -x127.0.0.1:80 abc.com -I
tail /usr/local/apache2.4/logs/abc.com-access_log
再訪問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
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
2.更改配置文件後需要重新加載配置文件:
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
3.測試查看是否會生成帶日期的日誌
curl -x127.0.0.1:80 abc.com
ls /usr/local/apache2.4/logs/ (生成帶日期日誌)
cat /usr/local/apache2.4/logs/abc.com-access_20180530.log //日誌文件有記錄
這裏的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>
最終配置保存:
解釋說明:
這部分配置用到了mod_expires模塊,相關配置內容並不難理解,通過字面也可以大致猜到其含義。這裏gif、jpeg、png格式的文件過期時長為1天,css、js、flash格式的文件過期時長為2小時,其他文件過期時長為0,也就是不緩存。
2. 查看expires_module模塊有沒有打開:
/usr/local/apache2.4/bin/apachectl -M |grep expire
2.1 沒有搜到expire模塊,就去主配置文件修改,將expire模塊的#去掉
vim /usr/local/apache2.4/conf/httpd.conf
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
5.curl來測試效果
curl -x127.0.0.1:80 abc.com/linux.jpg -I
可以看到max-age=86400,這說明jpg的圖片將緩存86400秒,也就是一天。
5.1用瀏覽器查看測試,刷新過後 狀態碼304 就是緩存下來的圖片
5月30日