1. 程式人生 > >訪問日誌不記錄靜態文件、訪問日誌切割、靜態元素過期時間

訪問日誌不記錄靜態文件、訪問日誌切割、靜態元素過期時間

lamp架構

訪問日誌不記錄靜態文件

當訪問很多圖片,文檔等靜態資源的時候,會加大你日誌的容量,日誌容量占用你磁盤空間後,會出現服務器宕機等很嚴重的問題,這時需要將日誌進行配置優化。當訪問網頁時不記錄這些圖片、css、js等信息日誌。

1、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.111.com www.example.com

php_admin_flag short_open_tag on

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

</IfModule>

ErrorLog "logs/111.com-error_log"

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

#以上都被標記為img變量;(.gif/.jpg)結尾的;env=!img:這個表示被記錄在日誌中

CustomLog "logs/111.com-access_log" combined env=!img

</VirtualHost>

2、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful

技術分享


技術分享


擴展:

我的需求是,把類似請求 www.aaa.com/aaa/... 這樣的請求才記錄日誌。

在httpd.conf 或者 相關的虛擬主機配置文件中添加

SetEnvIf Request_URI "^/aaa/.*" aaa-request

CustomLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/aaa-access_%Y%m%d.log 86400" combined env=aaa-request


這樣就可以了。這個原理和不記錄圖片等靜態訪問的日誌是一樣的。


訪問日誌切割

1、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf


</IfModule>

ErrorLog "logs/111.com-error_log"

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 "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

#-l:以標準時間計算

#使用rotatelogs切割,按86400秒計算(就是一天的時間切割)

#按每小時 3600秒

</VirtualHost>

2、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3、看下日誌:

技術分享


4、使用cronolog方式來切割

每一天建立一個新日誌

CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined

每小時建立一個新日誌

CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined


rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

選項

-l

使用本地時間代替GMT時間作為時間基準。註意:在一個改變GMT偏移量(比如夏令時)的環境中使用-l會導致不可預料的結果。所以一定要加上-l 否則出現的日誌時間和實際時間是相差8小時的。


logfile

它加上基準名就是日誌文件名。如果logfile中包含”%”,則它會被視為用於strftime()的格式字符串;否則它會被自動加上以秒為單位的”.nnnnnnnnnn”後綴。這兩種格式都表示新的日誌開始使用的時間。


rotationtime

日誌文件滾動的以秒為單位的間隔時間。


offset

相對於UTC的時差的分鐘數。如果省略,則假定為”0″並使用UTC時間。比如,要指定UTC時差為”-5小時”的地區的當地時間,則此參數應為”-300″。


filesizeM

指定以filesizeM文件大小滾動,而不是按照時間或時差滾動。


靜態元素過期時間

當第一次訪問網頁時,瀏覽器自動將靜態的元素緩存到你的電腦上(如靜態圖片資源),第二次訪問則不用去服務器上獲取,直接在本機電腦上獲取緩存,好處:節省了服務器帶寬,加速用戶訪問;缺點:當服務器靜態資源更新了,你的本機電腦還在獲取之前的緩存,而不是最新的資源,這時用戶查看就出錯,就需要設置下過期時間

1、訪問http://111.com/3.png時,出現304表示直接在緩存上獲取

技術分享


2、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.111.com www.example.com

php_admin_flag short_open_tag on

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

</IfModule>

<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>

ErrorLog "logs/111.com-error_log"

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 "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

</VirtualHost>

3、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful

4、配置Apache,加載expires模塊

添加如下內容

[root@centos7 111.com]# vi /usr/local/apache2.4/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so

[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires

expires_module (shared)

檢測:

技術分享

[root@centos7 111.com]# curl -x127.0.0.1:80 111.com/3.png -I

HTTP/1.1 200 OK

Date: Thu, 09 Nov 2017 12:02:48 GMT

Server: Apache/2.4.29 (Unix) PHP/5.6.30

Last-Modified: Thu, 09 Nov 2017 12:02:48 GMT

ETag: W/"a102-55d97420ac440"

Accept-Ranges: bytes

Content-Length: 41218

Cache-Control: max-age=86400

Expires: Fri, 10 Nov 2017 12:02:48 GMT

Content-Type: image/png



本文出自 “探索發現新事物” 博客,請務必保留此出處http://shenj.blog.51cto.com/5802843/1980576

訪問日誌不記錄靜態文件、訪問日誌切割、靜態元素過期時間