1. 程式人生 > >httpd靜態文件緩存和日誌不記錄

httpd靜態文件緩存和日誌不記錄

工具 是否 html htpasswd 下使用 信息 image 定時 一個

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靜態文件緩存和日誌不記錄