httpd靜態文件緩存和日誌不記錄
在訪問一個web頁面時,httpd會記錄這個頁面中的圖片、js/css頁面或視頻訪問一類的記錄信息,並把這些信息存儲到日誌當中,記錄日誌是非常詳細的,但是日誌大小會增長的非常快,因為每一次訪問請求就有可能記錄上百條日誌信息,而這些日誌信息又是沒有用的,所以我們需要讓httpd不去記錄訪問產生的某些日誌記錄信息
配置在日誌記錄的配置項下,對圖片和css/js的訪問不做日誌記錄,這裏是記錄在虛擬主機配置文件中,如果是在主配置文件中配置,也是配置在指定日誌的路徑的配置下面
[root@www local]# vim httpd/conf/extra/httpd-vhosts.conf ? ErrorLog "logs/123.com-error_log" ? SetEnvIf Request_URI ".*\.gif$" imges ? SetEnvIf Request_URI ".*\.jpg$" imges ? SetEnvIf Request_URI ".*\.png$" imges ? SetEnvIf Request_URI ".*\.bmp$" imges ? SetEnvIf Request_URI ".*\.swf$" imges ? SetEnvIf Request_URI ".*\.js$" imges ? SetEnvIf Request_URI ".*\.css$" imges ? CustomLog "logs/123.com-access_log" combined env=!imges </VirtualHost>
檢查配置文件的正確性
[root@www local]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@www local]# /usr/local/httpd/bin/apachectl graceful
我們需要在虛擬主機的一個網頁根目錄添加一個圖片,然後用瀏覽器訪問這個圖片,觀察日誌中是否記錄訪問這個圖片的信息,在/usr/local/httpd/docs/123.com/目錄下使用rz命令上傳一個圖片,然後訪問該域名並在後面添加上圖片名稱,如www.123.com/girl.png
[root@www local]# vim httpd/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ? DocumentRoot "/usr/local/httpd/docs/123.com" ? ServerName 123.com ? ServerAlias www.123.com ? ErrorLog "logs/123.com-error_log" ? SetEnvIf Request_URI ".*\.gif$" imges ? SetEnvIf Request_URI ".*\.jpg$" imges ? SetEnvIf Request_URI ".*\.png$" imges ? SetEnvIf Request_URI ".*\.bmp$" imges ? SetEnvIf Request_URI ".*\.swf$" imges ? SetEnvIf Request_URI ".*\.js$" imges ? SetEnvIf Request_URI ".*\.css$" imges ? CustomLog "logs/123.com-access_log" combined env=!imges </VirtualHost>
測試部分
不記錄的配置都寫入後,首先讓配置不生效,註釋掉env=!imges ?(imges這裏是自定義名稱,引用的是上面配置的一個字表變量),graceful重新生效一下,然後觀察下訪問是否記錄日誌
記錄訪問小文件的信息配置:
使用tail -f動態顯示日誌產生的記錄,多次刷新訪問查看記錄信息
[root@www extra]# tail -f /usr/local/httpd/logs/123.com-access_log 192.168.1.112 - - [30/Jul/2018:09:38:10 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" 192.168.1.112 - - [30/Jul/2018:09:43:27 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
去掉註釋加入env=!imges的配置後再次請求這個圖片,日誌信息則不再增加,日誌不再記錄小文件的訪問信息
----------------部分配置---------------------
# AuthUserFile /usr/local/httpd/conf/htpasswd
# require valid-user
# </Directory>
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*\.gif$" imges
? SetEnvIf Request_URI ".*\.jpg$" imges
? SetEnvIf Request_URI ".*\.png$" imges
? SetEnvIf Request_URI ".*\.bmp$" imges
? SetEnvIf Request_URI ".*\.swf$" imges
? SetEnvIf Request_URI ".*\.js$" imges
? SetEnvIf Request_URI ".*\.css$" imges
? CustomLog "logs/123.com-access_log" combined env=!imges
</VirtualHost>
[root@www extra]# /usr/local/httpd/bin/apachectl graceful
[root@www extra]# tail -f /usr/local/httpd/logs/123.com-access_log
192.168.1.112 - - [30/Jul/2018:09:38:10 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
192.168.1.112 - - [30/Jul/2018:09:43:27 +0800] "GET /girl.png HTTP/1.1" 200 4666274 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
httpd訪問日誌切割
httpd對每日產生的日誌進行切割,切割的日誌可以以自定義多長時間來進行切割,切割可以引用時間戳來作為命名
[root@www extra]# tail -n 15 httpd-vhosts.conf
# require valid-user
# </Directory>
? ErrorLog "logs/123.com-error_log"
? SetEnvIf Request_URI ".*\.gif$" imges
? SetEnvIf Request_URI ".*\.jpg$" imges
? SetEnvIf Request_URI ".*\.png$" imges
? SetEnvIf Request_URI ".*\.bmp$" imges
? SetEnvIf Request_URI ".*\.swf$" imges
? SetEnvIf Request_URI ".*\.js$" imges
? SetEnvIf Request_URI ".*\.css$" imges
? CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/123.com-access_%Y%mYdlog 86400" combined env=!imges
</VirtualHost>
[root@www extra]# /usr/local/httpd/bin/apachectl -t
Syntax OK
配置說明:
/usr/local/httpd/bin/rotatelogs ? 這個是apache自帶的一個切割工具,可以以時間戳來命名日誌文件,日誌文件可以分時段進行切割
切割的日誌會分日期保存在日誌目錄下,但是這些日誌不會自動被刪除,需要寫入任務計劃或者腳本中定期執行,刪除指定時間的日誌其主要命令如下:
find /usr/local/httpd/logs/ ?-mtime +15 f -name *.log -exec rm -rf {} ?\;?
瀏覽器緩存靜態元素文件
瀏覽器訪問網站時會下載例如gif、jpg、javascript的靜態文件,當用戶每次訪問時都會從服務器下載這些文件,當這些文件服務器端沒有變化的時候,用戶每次訪問都會重新下載一遍這些文件,就沒必要每次都從服務器端拉取這些短時間不變化的文件,配置服務端讓這些文件在用戶的瀏覽器中保留一段時間,過了這段時間再次從服務器端下載
配置/usr/local/httpd/conf/extra/httpd-vhosts.conf虛擬主機配置文件,添加以下的模塊配置
[root@www extra]# vim 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 hours"
? 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 puls 0 min"
</IfModule>
ExpiresActuve ?on ?打開瀏覽器緩存靜態文件功能
ExpiresByType image/gif\jpeg\png\css ? ?讓瀏覽器緩存這些類型的靜態文件
ExpiresByType application/x-javascript ? 緩存javascript的靜態網頁文件
ExpiresDefault ? 其他元素的文件一律不緩存
在httpd.conf中打開expires的模塊
[root@www extra]# vim /usr/local/httpd/conf/httpd.conf
---------------------------------------------------
LoadModule expires_module modules/mod_expires.so
重新加載httpd的配置
[root@www extra]# /usr/local/httpd/bin/apachectl graceful
[root@www extra]# /usr/local/httpd/bin/apachectl -M |grep expires
expires_module (shared)
在瀏覽器中第一次訪問web中的查看用戶端的訪問狀態碼為200,第二次訪問的狀態碼則是304,304狀態碼表示該文件已經緩存到用戶瀏覽器中
服務器端查看訪問的狀態,其中Cache-control表示緩存86400秒,也就是該圖片在用戶瀏覽器緩存數據中會保留一天的時間,這一天內訪問這個網站時都不會去從服務器下載該圖片文件
[root@www 123.com]# curl -x127.0.0.1:80 123.com/girl.png -I
HTTP/1.1 200 OK
Date: Mon, 30 Jul 2018 05:24:44 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.37
Last-Modified: Mon, 30 Jul 2018 05:24:44 GMT
ETag: W/"4733a2-57247be175d40"
Accept-Ranges: bytes
Content-Length: 4666274
Cache-Control: max-age=86400
Expires: Tue, 31 Jul 2018 05:24:44 GMT
Content-Type: image/png
httpd靜態文件緩存和日誌不記錄