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

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

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 靜態元素過期時間