1. 程式人生 > >5月30日

5月30日

linux

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

最終保存配置:

技術分享圖片

說明:先定義一個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日