11.22 訪問日誌不記錄靜態文件 11.23 訪問日誌切割 11.24 靜態元素過期時間
阿新 • • 發佈:2017-10-11
11.22 訪問日誌不記錄靜態文件 11.23 訪問日誌切割 11.24 靜態元素過期時間
- 11.22 訪問日誌不記錄靜態文件 - 11.23 訪問日誌切割 - 11.24 靜態元素過期時間 - 擴展 1. apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960 2. apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981 3. apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037 4. apache 日誌切割問題 http://ask.apelearn.com/question/566 # 11.22訪問日誌不記錄靜態文件 - 瀏覽器可以查看到頁面元素,按F12查看頁面元素內容 因為頁面很多小圖片之類的元素,沒有必要去記錄這些靜態的元素,因為每個請求都去記錄這些日誌,會導致一天下來日誌的量很大,一天下來幾個G ,所以沒有必要記錄這些東西,有必要把這些排除掉, - 所有就有了需求,對於靜態的元素的uri 不進行記錄 - 修改虛擬主機配置文件,在配置文件錯誤日誌下添加下一些變量 - 先打開虛擬主機配置文件 ``` [[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 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> RewriteEngine on RewriteCond %{HTTP_HOST} !^111.com$ RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] </IfModule> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" combined "/usr/local/apache2.4/conf/extra/httpd-vhosts.conf" 53L, 1707C 51,5 92% ``` - 插入一些變量 ``` <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 CustomLog "logs/111.com-access_log" combined env=!img </VirtualHost> "/usr/local/apache2.4/conf/extra/httpd-vhosts.conf" 60L, 1996C 58,5 底端 ``` - 定義了一個環境,如果這個請求 標記 正則帶有gif jpg png bmp swf js css 這些為img - env=!img 表示只要是符合這些條件的 請求,都不會記錄到這個日誌裏 env 非img 類型的都進行日誌記錄,保存配置文件 - 檢測,重新加載配置,來訪問下 ``` [[email protected] ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful [[email protected] ~]# curl -x127.0.0.1:80 111.com/alskdjflks.jpg -I HTTP/1.1 404 Not Found Date: Tue, 10 Oct 2017 12:35:31 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 [[email protected] ~]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - - [09/Oct/2017:00:20:06 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 - 127.0.0.1 - aming [09/Oct/2017:00:21:36 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 127.0.0.1 - aming [09/Oct/2017:00:22:38 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" [[email protected] ~]# ``` - 查看日誌,發現最新的幾條日誌裏面都沒有進行記錄,發現只要包含jgp,png 的都不會記錄 回到配置文件,改動配置,重新測試看看是否會記錄 - 再來重新執行curl 改為png 試下 ``` [[email protected] ~]# curl -x127.0.0.1:80 111.com/alskdjflks -I HTTP/1.1 404 Not Found Date: Tue, 10 Oct 2017 12:38:51 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 [[email protected] ~]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - aming [09/Oct/2017:00:21:36 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 127.0.0.1 - aming [09/Oct/2017:00:22:38 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:38:51 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" [[email protected] ~]# curl -x127.0.0.1:80 111.com/alskdjflks.png -I HTTP/1.1 404 Not Found Date: Tue, 10 Oct 2017 12:41:15 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 [[email protected] ~]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - aming [09/Oct/2017:00:21:36 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 127.0.0.1 - aming [09/Oct/2017:00:22:38 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:38:51 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" [[email protected] ~]# curl -x127.0.0.1:80 111.com/alskdjflks -I HTTP/1.1 404 Not Found Date: Tue, 10 Oct 2017 12:41:26 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 [[email protected] ~]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - aming [09/Oct/2017:00:22:38 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:38:51 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:41:26 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" [[email protected] ~]# ``` - 上傳一張圖片 ``` [[email protected] ~]# cd /data/wwwroot/111.com/ [[email protected] 111.com]# ls 123.php index.php [[email protected] 111.com]# rz [[email protected] 111.com]# ls 123.php baidu.png index.php ``` - 我們來請求下,這次不可能是404了,因為這圖片本身就是存在的 ``` [[email protected] 111.com]# curl -x127.0.0.1:80 111.com/baidu.png -I HTTP/1.1 200 OK Date: Tue, 10 Oct 2017 12:46:53 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Last-Modified: Tue, 10 Oct 2017 12:44:26 GMT ETag: "e7a-55b30aad1fe80" Accept-Ranges: bytes Content-Length: 3706 Content-Type: image/png [[email protected] 111.com]# ``` - 再去windows上面 訪問下111.com/baidu.png 再來查看下日誌,發現根本就沒有發現baidu.png 圖片訪問的日誌 還是和上次一樣的日誌文件 ``` [[email protected] 111.com]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - aming [09/Oct/2017:00:22:38 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:38:51 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:41:26 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" [[email protected] 111.com]# ``` - 如果把配置文件改下 把裏面env=!img 刪掉 再來試下 ``` </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 </VirtualHost> :wq ``` - 檢查 ,重新加載 訪問下,再來看看日誌文件 ``` [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl graceful [[email protected] 111.com]# curl -x127.0.0.1:80 111.com/baidu.png -I HTTP/1.1 200 OK Date: Tue, 10 Oct 2017 12:54:16 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Last-Modified: Tue, 10 Oct 2017 12:44:26 GMT ETag: "e7a-55b30aad1fe80" Accept-Ranges: bytes Content-Length: 3706 Content-Type: image/png [[email protected] 111.com]# tail /usr/local/apache2.4/logs/111.com-access_log 127.0.0.1 - aming [09/Oct/2017:00:26:45 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:29:12 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 7 192.168.202.131 - - [09/Oct/2017:20:32:46 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:20:37:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 403 - 192.168.202.131 - - [09/Oct/2017:20:41:18 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - 192.168.202.131 - - [09/Oct/2017:22:01:53 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 192.168.202.131 - - [09/Oct/2017:22:02:25 +0800] "HEAD http://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:38:51 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:41:26 +0800] "HEAD HTTP://111.com/alskdjflks HTTP/1.1" 404 - "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:20:54:16 +0800] "HEAD HTTP://111.com/baidu.png HTTP/1.1" 200 - "-" "curl/7.29.0" [[email protected] 111.com]# ``` - 再把配置文件改回來,檢查配置文件,重新加載配置文件, - 再訪問baidu.png 最新日誌就不會生成出來 - [x] - 為什麽要不去記錄這些圖片?這些日誌, - 如果不去做限制,每次個請求都包含圖片,每次請求都生成日誌文件,這個日誌文件會變的越來越大,浪費磁盤空間,消耗磁盤io, 這些日誌文件根本就沒有意義,平時看日誌是看請求過哪些頁面而不是看請求過哪些圖片 ,所有有必要做一個限制 # 11.23 訪問日誌切割 - 如果一個日誌不停的往文件裏去寫,總有一天會把磁盤寫滿,如果一天1g ,100天就100個g,對於訪問日誌來講,不停地在後面追加,對於它來講,不需要打開文件,也不會影響說明效率,對於我們來講,磁盤空間滿了是很危險的事情,也不應該讓這樣的事情發生,所以有必要每天把日誌做一個切割,比如每天淩晨 把昨天的日誌歸檔,今天開始又有一個新的日誌,超過30天 或者60天的日誌 拷貝走,這樣磁盤空間永遠也不會滿, - 怎麽實現日誌切割? - 把虛擬主機配置文件改成如下: ``` <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.4/logs - 首先打開虛擬主機配置文件 ``` <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 CustomLog "logs/111.com-access_log" combined env=!img </VirtualHost> "/usr/local/apache2.4/conf/extra/httpd-vhosts.conf" 60L, 1997C 58,5 ``` - 添加變量 - %Y%m%d.log,日誌 以%Y年,%m月,%d日來進行命名 最後的86400單位是秒,也就是一天的時間,每一天0點後開始以年月日新命名創建一個日誌 - CustomLog “|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400” combined env=!img 因為是新創建,需要新的訪問以後 日誌目錄才會新創建一個以今天日期命名的文件 ``` <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 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log86400" combined env=!img </VirtualHost> :wq ``` - 重新檢查、加載配置文件 , ``` [[email protected] 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [1]+ 已停止 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [[email protected] 111.com]# date 2017年 10月 10日 星期二 21:14:40 CST [[email protected] 111.com]# fg vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl graceful [[email protected] 111.com]# ``` - 在這個目錄下並沒有新的日誌文件生成 ``` [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl graceful [[email protected] 111.com]# ls /usr/local/apache2.4/logs/ 111.com-access_log abc.com-access_log access_log httpd.pid 111.com-error_log abc.com-error_log error_log [[email protected] 111.com]# ``` - 用crul 訪問下111.com/123.php 再看下最新的日誌文件 ``` [[email protected] 111.com]# ls /usr/local/apache2.4/logs/ 111.com-access_log 111.com-error_log abc.com-access_log abc.com-error_log access_log error_log httpd.pid [[email protected] 111.com]# curl -x127.0.0.1:80 111.com/123.php 123.php[[email protected] 111.com]# ls /usr/local/apache2.4/logs/ 111.com-access_log 123.com-access_20171010.log abc.com-error_log error_log 111.com-error_log abc.com-access_log access_log httpd.pid [[email protected] 111.com]# [[email protected] 111.com]# ls /usr/local/apache2.4/logs/123.com-access_20171010.log /usr/local/apache2.4/logs/123.com-access_20171010.log [[email protected] 111.com]# cat !$ cat /usr/local/apache2.4/logs/123.com-access_20171010.log 127.0.0.1 - - [10/Oct/2017:21:44:03 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0" [[email protected] 111.com]# ``` - 再來訪問下圖片文件,只不過png模式的不會記錄在日誌文件裏,加個png1 這樣就會記錄日誌了 ``` [[email protected] 111.com]# curl -x127.0.0.1:80 111.com/123.php.png1 -I HTTP/1.1 404 Not Found Date: Tue, 10 Oct 2017 13:48:37 GMT Server: Apache/2.4.27 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 [[email protected] 111.com]# cat /usr/local/apache2.4/logs/123.com-access_20171010.log 127.0.0.1 - - [10/Oct/2017:21:44:03 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0" 127.0.0.1 - - [10/Oct/2017:21:48:37 +0800] "HEAD HTTP://111.com/123.php.png1 HTTP/1.1" 404 - "-" "curl/7.29.0" [[email protected] 111.com]# ``` - 只要到淩晨得時候就會生成新的日誌,當然還要做一個任務計劃,比如把超過1個月 2個月的日誌刪掉,如果不刪 ,和有沒有切割沒有意義,如果不刪除舊的文件,相當於寫了多個文件,也會生成多個日誌文件把磁盤寫滿, - 總結:做日誌切割日誌的目的是為了防止 把磁盤寫滿,再一個是更方便的管理日誌,每天一個,每天一個,這樣非常的有規律,查找的時候也很方便,比如像查看倆天前 訪問日誌的量,有了切割就會方便茶軸, - 寫一個任務計劃,指定超過多少大小的日誌文件刪掉。 # 11.24 配置靜態元素過期時間 - 什麽叫靜態元素呢,比如訪問的那些圖片,css js jgp png - 當你用瀏覽器去訪問一個網站的時候,這個網站裏所有的靜態文件,比如說某一個小圖片,它的樣式啊,它的一些js,樣式其實就是css 涉及到一些前端的知識,說說圖片 - 當瀏覽器訪問網站的時候,網站的元素,這裏的若幹圖片,瀏覽器會默認的把文件緩存到本地,把它叫做臨時的一個文件,臨時的一個緩存目錄,緩存多久了,這個是瀏覽器裏定義的,如果你不去定義,它也不會把緩存文件清空 - 它為什麽把這些圖片放在本地,緩存的目的就是為了第二次訪問的時候,不用再去加載和下載這些圖片提高網頁的訪問速度,節省帶寬,以便提高用戶體驗 - 但是長時間的緩存,如果頁面的某些小地方有了改動,因為有緩存在,也不會重新去下載。 可以使用瀏覽器自帶的F12鍵去進行比對,第一次訪問一個圖片的時候是200的狀態碼,第二次訪問的時候,就是304,證明圖片沒有改動,所以他不會重新進行下載緩存進行操作,添加靜態元素過期時間的配置 - 首先打開虛擬主機配置文件 ``` <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 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img </VirtualHost> "/usr/local/apache2.4/conf/extra/httpd-vhosts.conf" 59L, 2051C 59,1 底端 ``` - 更改配置文件內容 ``` <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 :wq ``` - 先檢查下有沒有語法錯誤, - 還需要看下expaire 這麽模塊有沒有打開 ``` [[email protected] 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire [[email protected] 111.com]# ``` - 明顯沒有,還需要編輯主配置文件 搜索expi ``` [[email protected] 111.com]# vim /usr/local/apache2.4/conf/httpd.conf #LoadModule ratelimit_module modules/mod_ratelimit.so LoadModule reqtimeout_module modules/mod_reqtimeout.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule request_module modules/mod_request.so #LoadModule include_module modules/mod_include.so LoadModule filter_module modules/mod_filter.so #LoadModule substitute_module modules/mod_substitute.so #LoadModule sed_module modules/mod_sed.so LoadModule mime_module modules/mod_mime.so LoadModule log_config_module modules/mod_log_config.so #LoadModule log_debug_module modules/mod_log_debug.so #LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so #LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so #LoadModule remoteip_module modules/mod_remoteip.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so 已查找到文件結尾,再從開頭繼續查找 ``` - 找到#LoadModule expires_module modules/mod_expires.so 把井號去掉 打開這個模塊 ``` LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so #LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so #LoadModule remoteip_module modules/mod_remoteip.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so :wq ``` - 再檢查語法,重新加載 再來看下 ``` [[email protected] 111.com]# vim /usr/local/apache2.4/conf/httpd.conf [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl graceful [[email protected] 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expire expires_module (shared) [[email protected] 111.com]# ``` - 模塊有了 ,現在來做實驗 ``` [[email protected] 111.com]# curl -x127.0.0.1:80 111.com/baidu.png -I HTTP/1.1 200 OK Date: Tue, 10 Oct 2017 14:25:22 GMT 這個是當前時間 Server: Apache/2.4.27 (Unix) PHP/7.1.6 Last-Modified: Tue, 10 Oct 2017 12:44:26 GMT ETag: "e7a-55b30aad1fe80" Accept-Ranges: bytes Content-Length: 3706 Cache-Control: max-age=86400 Expires: Wed, 11 Oct 2017 14:25:22 GMT 這個是過期時間 Content-Type: image/png [[email protected] 111.com]# ``` - Date: Tue, 10 Oct 2017 14:25:22 GMT 這個是當前時間 ,這個Expires: Wed, 11 Oct 2017 14:25:22 GMT 這個是過期時間 - 結果表明,png圖片的請求多了一個緩存時間 時間為86400秒和當前時間正好差了一個24小時。 - 一般只要是公司的網站,都會設置這個過期時間 ### 擴展 1. apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960 默認情況下log日誌格式為: ``` LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 其中%h 是記錄訪問者的IP,如果在web的前端有一層代理,那麽這個%h其實就是代理機器的IP,這不是我們想要的。在這種情況下, %{X-FORWARDED-FOR}i 字段會記錄客戶端真實的IP。所以log日誌改為: LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ``` 2. apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981 我的需求是,把類似請求 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 ``` 這樣就可以了。這個原理和不記錄圖片等靜態訪問的日誌(http://www.lishiming.net/thread-561-1-1.html)是一樣的。 3. apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037 正常情況下,根本就沒有必要記錄這一項,畢竟咱們大都根據虛擬主機來設置相應的訪問日誌,但也有個別的情況,比如 ServerName *.abc.com 這樣泛解析的形式,所以有必要記錄一下用戶請求的域名到底是哪個。 而apache的LogFormat 中正好有一項值滿足了這個需求。即 %V 這裏是大寫的V ,小寫的v 記錄的是咱們在虛擬主機中設置的ServerName ,這個的確是沒有必要記錄的。 4. apache 日誌切割問題 http://ask.apelearn.com/question/566 apache的日誌是可以自動切割的。 方法一: 使用 cronolog 為每一天建立一個新的日誌 ``` CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined 也可以按小時 CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined 方法二:使用 rotatelogs 每一天記錄一個日誌 CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined 每小時 CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d%H.log 3600" combined 再看apache rotatelogs語法 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文件大小滾動,而不是按照時間或時差滾動。
11.22 訪問日誌不記錄靜態文件 11.23 訪問日誌切割 11.24 靜態元素過期時間