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

擴展 
apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960
apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981
apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037
apache 日誌切割問題 http://ask.apelearn.com/question/566javascript

訪問日誌不記錄指定類型的文件目錄概要

  • 網站大多元素爲靜態文件,如圖片、css、js等,這些元素能夠不用記錄
  • 把虛擬主機配置文件改爲以下:在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 "logs/111.com-access_log" combined env=!imgphp

  • 從新加載配置文件 -t, graceful
  • mkdir /data/wwwroot/www.111.com/images //建立目錄,並在這目錄下上傳一個圖片
  • curl -x127.0.0.1:80 -I 111.com/images/baidu.png
  • tail /usr/local/apache2/logs/111.com-access_log

訪問日誌不記錄指定類型的文件

  • 瀏覽器能夠查看到頁面元素,按 F12 查看頁面元素內容,它默認定位在Network。若是不是在Network,就去選擇下Network,而後刷新下網頁,會看到如圖css

  • 會看到右側出現不少的元素,每一行都表示一個元素,這些請求,這些訪問都會記錄到訪問日誌裏面去的,但實際上沒有必須記錄一些圖片、css、js等元素,而這些請求都會記錄到日誌文件裏,就會致使天天的日誌訪問量很大,對以後的運維很不方便,因此就有了需求,對於靜態的元素的uri 不進行記錄html

  • 排除圖片、css、js等,拷貝配置文件到服務器裏面java

  • 須要拷貝的配置文件
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com 2111.com.cn
    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 "logs/111.com-access_log" combined env=!img
</VirtualHost>
  • 打開虛擬主機配置文件
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 在 ErrorLog 下一行插入
[root@yong-02 images]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 
#<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com 2111.com.cn
    #<Directory /data/wwwroot/111.com>
    #<FilesMatch 123.php>
     #    AllowOverride AuthConfig
     #    AuthName "111.com user auth"
     #    AuthType Basic
     #    AuthUserFile /data/.htpasswd
     #    require valid-user
     #</FilesMatch>    
     #</Directory> 
     # <IfModule mod_rewrite.c> 
       #須要mod_rewrite模塊支持
     #   RewriteEngine on 
       #打開rewrite功能
     #    RewriteCond %{HTTP_HOST} !^111.com$  
        #定義rewrite的條件,主機名(域名)不是111.com知足條件
     #    RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] 
       #定義rewrite規則,當知足上面的條件時,這條規則纔會執行
     #  </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 "logs/111.com-access_log" combined env=!img
</VirtualHost>


並保存退出
  • 至關於定義了一個環境
  • img 是一個標籤、一個變量,能夠自定義,能夠是任意字符
  • 定義」..gif$」、」..jpg$」、」..png$」、」..bmp$」、」..swf$」、」..js$」、」.*.css$」;這些都是 img
  • env=!img 表示 env非 img 類型的都進行日誌記錄
  • 在設置好配置文件後,先不加載配置文件,先作一個測驗
[root@yong-02 images]# curl -x127.0.0.1:80 111.com/fsadfq.jpg -I
HTTP/1.1 404 Not Found
Date: Wed, 30 May 2018 13:59:42 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
  • 在訪問這樣的請求,不論是404,仍是200都會記錄日誌
[root@yong-02 images]# tail /usr/local/apache2/logs/111.com-access_log 
127.0.0.1 - - [30/May/2018:22:00:53 +0800] "HEAD HTTP://111.com/1.php HTTP/1.1" 200 - "-" "curl/7.29.0"
127.0.0.1 - - [30/May/2018:22:01:14 +0800] "HEAD HTTP://111.com/images/baidu.com HTTP/1.1" 404 - "-" "curl/7.29.0"
  • 而後在檢查配置文件語法,並從新加載配置文件
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful
  • 這時再來curl訪問,會發現日誌中沒有記錄
[root@yong-02 images]# tail /usr/local/apache2/logs/111.com-access_log 
127.0.0.1 - - [30/May/2018:22:00:53 +0800] "HEAD HTTP://111.com/1.php HTTP/1.1" 200 - "-" "curl/7.29.0"
127.0.0.1 - - [30/May/2018:22:01:14 +0800] "HEAD HTTP://111.com/images/baidu.com HTTP/1.1" 404 - "-" "curl/7.29.0"
  • 只要是gif、jpg、png、bmp、swf、js的都不會在日誌中有記錄

本地上傳圖片並訪問

  • 進入到在/data/wwwroot/111.com/images目錄下 並上傳一張圖片到該目錄下
[root@yong-02 ~]# cd /data/wwwroot/111.com/images/
[root@yong-02 images]# ls 
baidu.png

用curl命令查看圖片,會發現圖片是能訪問的apache

[root@yong-02 images]# curl -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 14:05:19 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
  • 在瀏覽器訪問網頁圖片,會發現圖片是能訪問的

  • 查看日誌文件,會發現日誌文件中沒有記錄圖片的日誌,這個就是由於定義了日誌標籤
[root@yong-02 images]# tail -5 /usr/local/apache2/logs/111.com-access_log 
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:42 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://111.com/images/baidu.png" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
  • 這時去掉虛擬主機配置文件中的env=!img ,在用瀏覽器瀏覽圖片,在curl命令訪問圖片

 

  • 這時再來刷新瀏覽器訪問圖片,用curl訪問圖片
[root@yong-02 images]# curl -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 14:09:41 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
  • 查看日誌文件,會發現日誌文件有記錄存在
[root@yong-02 images]# tail -5 /usr/local/apache2/logs/111.com-access_log 
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:41 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
192.168.180.1 - - [30/May/2018:22:06:42 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://111.com/images/baidu.png" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4482.400 QQBrowser/9.7.13001.400"
127.0.0.1 - - [30/May/2018:22:12:11 +0800] "HEAD HTTP://111.com/images/baidu.png HTTP/1.1" 200 - "-" "curl/7.29.0"
  • 這時在到虛擬主機配置文件中加上env=!img ,並從新加載配置文件,在刷新圖片,會看到日誌文件中並無記錄日誌

日誌文件不記錄總結

  • 如果不去作一個限制,那麼每一次請求都會記錄到日誌文件,日誌文件就會變得愈來愈大,這樣不只會消耗磁盤空間,還會耗費磁盤i/o,並且這些文件毫無心義,因此須要作一個限制

訪問日誌切割

  • 日誌一直記錄總有一天會把整個磁盤佔滿,因此有必要讓它自動切割,並刪除老的日誌文件
  • 把虛擬主機配置文件改爲以下:
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
   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/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
  • 從新加載配置文件 -t, graceful
  • ls /usr/local/apache2/logs

訪問日誌切割

  • 當日志一直往一個文件中寫入,總會有一天把磁盤寫滿,因此就須要把文件天天作一個切割,而後超過必定時間段的這些日誌刪除或者拷貝走,這樣就能保證磁盤永遠寫不滿
  • 打開配置文件
  • vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

更改CustomLog配置
1.首先指定一個工具rotatelogs
2.在定義一個日誌的名稱%Y%m%d
3.規定時間去生成,時間段就爲1天,換算成秒,就是86400秒

CustomLog "|/usr/local/apache2/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

而後保存退出
  • rotatelogs工具,它是Apache自帶的一個切割工具
    • -l參數,目的是以當前系統時間爲基準。若是不指定 -l ,那麼就會指定 UTC時間 的格式去切割日誌
      • 在中國應該是 CST,在美國是 UTC ,二者時區不一樣,相差幾個小時
  • 定義日誌的名稱,由於是切割的,因此根據時間日期讓它自動變,就須要加一個變量%Y%m%d
    • %Y,表示 年
    • %m,表示 月
    • %d,表示 日
  • 按規定時間去生成,時間段爲1天,換算成秒,就是86400秒
  • 而後查看配置文件語法有無錯誤,並從新加載配置文件
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 ~]# /usr/local/apache2/bin/apachectl graceful
  • 這時候還須要去作一些訪問,由於尚未任何的日誌生成,在這個目錄下尚未生成一個新的文件
[root@yong-02 images]# ls /usr/local/apache2/logs/
abc.com-access_log  dummy-host2.example.com-access_log  httpd.pid
111.com-access_log           abc.com-error_log   dummy-host2.example.com-error_log
111.com-error_log            access_log          error_log
  • 用curl命令訪問
[root@yong-02 images]# curl -x127.0.0.1:80 111.com/123.php
123.php[root@yong-02 images]#
  • 這時候會看到一個以日期爲後綴的新日誌文件
[root@yong-02 images]# ls /usr/local/apache2/logs/
111.com-access_20180530.log  abc.com-access_log  dummy-host2.example.com-access_log  httpd.pid
111.com-access_log           abc.com-error_log   dummy-host2.example.com-error_log
111.com-error_log            access_log          error_log
  • 查看新生成的日誌文件內容,會看到就是剛剛curl命令訪問的
[root@yong-02 images]# cat /usr/local/apache2/logs/111.com-access_20180530.log 
127.0.0.1 - - [30/May/2018:22:19:55 +0800] "HEAD HTTP://111.com/images/baidu.com HTTP/1.1" 404 - "-" "curl/7.29.0"
127.0.0.1 - - [30/May/2018:22:25:55 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0"
  • 在之後的凌晨0點的時候,就會生成一個新的日誌
  • 另外還須要作一個任務計劃,超過一個月或兩個月的日誌刪除,若是不刪除,那是否切割日誌就沒有意義了

日誌切割總結

  • 作日誌切割的目的,是爲了防止磁盤寫滿,另外一個目的就是爲了更方便的去管理日誌

配置靜態元素過時時間目錄概要

  • 瀏覽器訪問網站的圖片時會把靜態的文件緩存在本地電腦裏,這樣下次再訪問時就不用去遠程下載了 增長配置
<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>
  • 須要expires_module
  • curl測試,看cache-control: max-age

配置靜態元素過時時間

  • 靜態元素,就是訪問的圖片、css、js
  • 當用瀏覽器去訪問一個網站的時候,這個網站裏全部的靜態文件(好比圖片的樣式、js),瀏覽器就會默認把靜態文件緩存在電腦裏,叫作臨時的目錄或目錄
    • 緩存的時間是在服務器上定義的,若是不去定義,那麼瀏覽器也不會把這些文件清空,或者瀏覽器有本身的機制去清空這些文件,或者說電腦軟件會定時幫你清理這些緩存的文件
    • 爲何電腦會自動加載這些靜態文件呢?目的就是第二次,第三次訪問的時候,不去服務器去下載這些靜態文件了
  • 在使用瀏覽器自帶的F12鍵去進行比對,第一次訪問一個圖片的時候是200的狀態碼,第二次訪問的時候,就是304,它檢測到下載的圖片並無修改過,因此就不會從新到服務器下載一次,這樣能夠節省帶寬,但沒有規定緩存何時清空,何時去服務器上去下載,再次下載,由於只要瀏覽器檢測到圖片未作更改,它這個狀態碼就一直爲304,304這個狀態碼就意味着他不會去服務器下載

定義靜態文件失效日期

  • expires_module模塊,定義失效日期
  • 打開虛擬主機配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,並添加配置文件
  • 須要添加的配置文件
    • 這裏有全部的圖片定義成一天
    • 全部的 css 和 js 都定義成兩小時
    • 其餘的沒有任何的緩存
<IfModule mod_expires.c>
    ExpiresActive on      //打開該功能的開關
    ExpiresByType image/gif  "access plus 1 days"    //定義Type類型,這裏是一天
    ExpiresByType image/jpeg "access plus 24 hours"        //定義Type類型,這裏是24小時
    ExpiresByType image/png "access plus 24 hours"        //定義Type類型
    ExpiresByType text/css "now plus 2 hour"                        //定義Type類型,兩小時
    ExpiresByType application/x-javascript "now plus 2 hours"       // 定義Type類型
    ExpiresByType application/javascript "now plus 2 hours"        //定義Type類型
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"        //定義Type類型
    ExpiresDefault "now plus 0 min"            //定義Type類型
</IfModule>
  • 在配置文件中添加
[root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf


<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com 2111.com.cn
    #<Directory /data/wwwroot/111.com> 
    #<FilesMatch 123.php>
    #    AllowOverride AuthConfig 
    #    AuthName "111.com user auth"
    #    AuthType Basic 
    #    AuthUserFile /data/.htpasswd  
    #    require valid-user
    # </FilesMatch>
    #</Directory>
    <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/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

並保存退出
  • 而後檢查是否存在語法錯誤
[root@yong-02 images]# /usr/local/apache2/bin/apachectl -t 
Syntax OK
  • 查看expire模塊是否打開,會發現expire模塊沒有打開
[root@yong-02 images]# /usr/local/apache2/bin/apachectl -M |grep expire
  • 編輯主配置文件,打開expire模塊
  • vim /usr/local/apache2/conf/httpd.conf
[root@yong-02 ~]# vim /usr/local/apache2/conf/httpd.conf

搜索 /expire ,找到該行的配置文件,並去除的註釋符 # 號
LoadModule expires_module modules/mod_expires.so

而後保存退出
  • 在從新加載配置文件,並查看expire模塊
[root@yong-02 images]# /usr/local/apache2/bin/apachectl -M |grep expire
 expires_module (shared)
  • 按ctrl+F5能夠強制把瀏覽器本地的緩存清空
  • 用curl命令去訪問圖片
[root@yong-02 images]# curl -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Wed, 30 May 2018 14:45:00 GMT     //當前時間
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Cache-Control: max-age=86400      //緩存的時間
Expires: Thu, 31 May 2018 14:45:00 GMT   //過時時間
Content-Type: image/png
  • 如果將expire模塊去除,再去curl命令查看圖片,就沒法看到Cache-Control參數
相關文章
相關標籤/搜索