LAMP架構訪問日誌的設置及切割、靜態文件失效設置

11月16日任務
11.22 訪問日誌不記錄靜態文件
11.23 訪問日誌切割
11.24 靜態元素過時時間
 
 

訪問日誌不記錄靜態文件

爲何要這樣設置

網站大多爲靜態網頁,網頁內部的圖片、css文件等一樣有其網址連接,若是不設置,這些無效的信息也將被存入訪問日誌中,會致使訪問日誌文件大小快速增長,佔用大量存儲空間。咱們能夠經過設置不記錄某些文件來減小無效信息,節省內存資源。javascript

如何設置

修改虛擬主機配置文件httpd-vhost.confphp

[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
...
    ErrorLog "logs/111.com-error_log"
    
    # SetEnvIf行設置img知足URI匹配.gif等的狀況,配合env=!img排除特定類型文件的錯誤日誌記錄。
    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
...

# 重啓服務,使配置生效
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果驗證

# 訪問包含.jpg等的路徑,訪問日誌不會記錄;訪問其餘則被記錄
[root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I
HTTP/1.1 200 OK
Date: ..., ... 11:19:25 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: ..., ... 11:19:21 GMT
ETag: "2-560d7df2b9966"
Accept-Ranges: bytes
Content-Length: 2
Content-Type: image/jpeg

#未記錄匹配到的jpg文件訪問記錄!
[root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log 
...
// 沒有最新的訪問圖片的記錄
192.168.65.133 - - [...:19:17:32 +0800] "HEAD HTTP://111.com/111.php HTTP/1.1" 200 - "-" "curl/7.29.0"

將env!=img去掉(記得重啓服務!!),看是否會記錄css

# 修改配置並重啓訪問
[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

# 從新測試
[root@localhost ~]# curl -x 192.168.65.133:80 111.com/111.jpg -I
HTTP/1.1 200 OK
Date: ..., ... 11:22:38 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: ..., ... 11:19:21 GMT
ETag: "2-560d7df2b9966"
Accept-Ranges: bytes
Content-Length: 2
Content-Type: image/jpeg

# 查看是否記錄
[root@localhost ~]# cat /usr/local/apache2.4/logs/111.com-access_log 
...
# 訪問jpg文件信息被記錄
192.168.65.133 - - [...:19:22:38 +0800] "HEAD HTTP://111.com/111.jpg HTTP/1.1" 200 - "-" "curl/7.29.0"

訪問日誌切割

就算不記錄某些無效信息,隨之服務器的運行,訪問日誌文件大小也將會不斷變大,經過設置日誌文件自動切割以及一段時間後刪除舊的日誌就變得較爲必要。html

如何設置

修改虛擬主機配置文件java

[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
...

# /usr/local/apache2.4/bin/rotatelogs工具是apache自帶的分割日誌的工具
# -l參數按當前系統時間爲基準進行切割(我國爲CST)
# %Y%m%d表示年月日,這樣會天天記錄一個帶日期的日誌文件,更方便
# 86400(s)表示天天都進行切割

    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img
    # 使用"|$"替代"|"來調用shell執行,默認是不會調用shell的
    # CustomLog "|$/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d_log 86400" combined env=!img
...

[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果測試

查看是否生成新格式的日誌文件shell

[root@localhost ~]# curl -x 127.0.0.1:80 111.com/111.php 
abc.com

# logs目錄下已經產生當天格式的訪問日誌
[root@localhost ~]# ls /usr/local/apache2.4/logs/
111.com-access_log           abc.com-access_log  error_log
111.com-error_log            abc.com-error_log   httpd.pid
111.com-access_20171221_log  access_log

補充內容

若是想按期刪除老日誌,能夠配合cron命令,能夠實現。apache

[root@localhost ~]# crontab -e
# 每個月1號刪除15天之前的全部帶日期的日誌文件
0 0 1 * * /usr/bin/find /usr/local/apache2.4/logs/ -regex ".*/.*-access_.*_log" -mtime +15 -exec rm -f {} \;

說明:因爲find目錄查找文件顯示爲絕對路徑,使用正則來匹配時不能只單單匹配文件名,還須要匹配其以前的路徑,這裏使用了-regex這個不經常使用的參數。vim

詳細說明參見:http://blog.csdn.net/lee244868149/article/details/43406335瀏覽器

靜態文件過時時間

瀏覽器訪問網站的圖片時會把靜態的文件緩存在本地電腦裏,這樣下次訪問時就不用再次獲取,直接就能夠使用,能夠節省帶寬資源。緩存

當狀態碼爲304時,瀏覽器將不會向服務器獲取已緩存的文件。

設置範例

先在主配置文件內開啓expires模塊

[root@localhost logs]# vim /usr/local/apache2.4/conf/httpd.conf
// 添加expire模塊,刪除行首的#
#LoadModule expires_module modules/mod_expires.so

// 查看expire模塊是否已加載,沒有的話要修改httpd.conf文件去加載
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -M | grep expire
 expires_module (shared)

在虛擬主機配置文件內增長以下配置

[root@localhost logs]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
...
<IfModule mod_expires.c>
    # 打開該功能的開關
    ExpiresActive on 
    
    # 按文件類型來設置自定義過時時間
    # acess表示從訪問時間開始
    # now表示按當前時間開始
    # plus在前面的時間基礎上加上
    # 1 hours/days 表示文件的生命週期
    # 例如 acess plus 1 days 表示該文件從訪問的時間開始1天內有效,無需從新獲取
    
    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"
    # 其餘表示方法
    # A:客戶端訪問時間
    # M: 文件最後修改的時間
    ExpiresByType img/bmp A2592000
    ExpiresByType text/html M604800
    
    # 除上述外的文件指定默認的過時時間
    ExpiresDefault "now plus 0 min"    
</IfModule>
...

從新加載配置文件

[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful

效果驗證

  • 指定類型(png)的文件訪問信息
# 
# 設置後的狀態信息中出現Cache-Control、Expires等信息
[root@localhost 111.com]# curl -x 192.168.65.133:80 111.com/lvm.png -I
HTTP/1.1 200 OK
Date: ..., ... 13:22:07 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Last-Modified: ..., ... 13:48:33 GMT
ETag: "23e28-55cec20a0ce40"
Accept-Ranges: bytes
Content-Length: 146984
Cache-Control: max-age=86400  //該時間等於Expires-Date
Expires: ..., ... 13:22:07 GMT  // 改行顯示了文件的過時時間
Content-Type: image/png
  • 默認文件類型(php)文件訪問信息
# 默認文件訪問後立刻過時,max-age爲0
[root@localhost ~]# curl -x 127.0.0.1:80 abc.com/abc.php -I
HTTP/1.1 200 OK
Date: ..., ... 12:03:44 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Cache-Control: max-age=0
Expires: ..., ... 12:03:44 GMT
Content-Type: text/html; charset=UTF-8
相關文章
相關標籤/搜索