日誌不記錄靜態文件,日誌切割,靜態文件過時緩存,nginx防盜鏈

日誌不記錄靜態文件

  • 在訪問日誌裏,過濾掉一些圖片,js,css,類的請求日誌
  • 這種請求日誌沒什麼用處,還佔用磁盤空間
  • 因此應該把這種請求從日誌裏過濾掉
  • 這樣日誌文件就不會記錄這種請求,浪費磁盤空間
  • 上圖是訪問日誌的信息
  • 能夠看到,第一個是靜態的 js 文件
  • 第二個請求的是 .gif 文件,也是靜態文件的請求
  • 在配置文件裏面設置,能夠把這種文件的請求信息過濾掉
  • 不記錄到日誌裏面
  • cd /etc/nginx/conf.d/
  • 進入配置文件目錄,而後 vi tom.bbs.conf 編輯配置文件
  • 如圖,添加上圖代碼塊
location ~* \.(png|jpeg|gif|js|css|bmp|flv)$ {
	access_log off;
}
  • 上圖代碼裏面 * 表明不區分大小寫
  • . 是正則,表明任意長度字符,由於 . 須要轉義,因此前面要加 \
  • (png|jpeg|gif|js|css|bmp|flv) 是一個總體
  • 意思是 png或jpeg或gif或js .... 的意思
  • $ 表明結尾的意思
  • 就是以 (png|jpeg|gif|js|css|bmp|flv) 其中之一結尾的意思
  • access_log off; 表示符合上面條件,不寫入訪問日誌
    • 的不區分大小寫是指 (png|jpeg|gif|js|css|bmp|flv)
  • 裏面的 png,jpeg,gif,js,css這些字符串不區分大小寫進行匹配的意思
  • 能夠是 png 或 Png 或 PNG 等等都符合匹配條件
  • 整個代碼塊的意思就是
  • 請求的文件名稱以 (png|jpeg|gif|js|css|bmp|flv) 其中之一結尾
  • 不區分大小寫,這個請求信息就不寫入訪問日誌
  • 而後保存退出,使用 nginx -t && nginx -s reload 檢測重載配置文件
  • cd /data/logs/bbs 進入bbs目錄
  • 使用命令 > bbs.access.log
  • 這樣就能夠清空日誌內容,如今日誌什麼東西都沒有了
  • 而後使用 tail -f bbs.access.log
  • 這樣能夠查看日誌的最後10行,並且是動態的
  • 也就是說,使用這個命令後,日誌不會自動關閉
  • 而是能夠隨着日誌的更新,不斷顯示最新的日誌內容
  • 如圖,打開論壇,f12 打開右邊界面,能夠看到網頁請求的信息
  • 能夠看到請求的文件有不少 png 文件
  • f5能夠刷新緩存
  • 使用 tail -f bbs.access.log 動態查看訪問日誌
  • 能夠看到,請求信息裏面,沒有任何 png
  • 或者別的過濾掉的格式的文件的請求信息
  • 這樣就成功把指定格式結尾的文件過濾掉了

日誌切割

  • 日誌文件會不斷的增大
  • 若是日誌文件太大,會難以查看
  • 並且磁盤也會被寫滿
  • 因此須要對日誌進行切割
  • 好比天天0點0分切割一次
  • 系統裏面日誌切割的服務叫作 logrotate
  • cat /etc/logrotate.conf 能夠查看logrotate服務的配置文件
  • 上圖是配置文件內容,第一個 weekly 表示每週切割一次
  • 第二個 rotate 4 表示保留4個
  • 切割了4個後,第5個會把前面的覆蓋掉
  • 第三個 create 表示把舊的文件名字修改以後
  • 而後建立一個新的空文件
  • 第四個 dateext 表示文件名稱使用日期後綴
  • 第五個 compress 表示壓縮文件
  • 可是這裏是註釋掉了,因此意思就是不壓縮
  • 若是須要壓縮文件,能夠把 compress前面的#取消掉
  • 第六個 include /etc/logrotate.d
  • 意思是包含了 logrotate.d 目錄下的子配置文件
  • 上圖是logrotate.conf 最後的內容
  • 這裏 /var/log/wtmp 是一個文件
  • 大括號內的內容是針對這個文件進行的一些配置
  • monthly 表示按月進行切割
  • create 0664 root utmp 是指建立新文件的權限
  • wtmp文件被切割後,建立的新文件權限就是 0664
  • 全部者是 root ,所屬組爲 utmp
  • minsize 1M 表示每一個文件最小爲 1MB
  • 若是文件大小小於1MB,那麼就不會對這個文件進行切割
  • rotate 1 表示只保留一個文件
  • 第二個代碼塊 /var/log/btmp {}
  • 也是針對 btmp 文件的一些配置
  • missingok 表示忽略錯誤
  • monthly 表示按月切割
  • create 0600 root utmp 一樣表示建立的新文件的權限,全部者,所屬組
  • rotate 1 只保留一個文件

  • 若是把nginx 的日誌文件,也寫入這個日誌切割服務的配置文件裏面
  • 那麼日誌切割服務就能夠切割 nginx 的日誌文件了
  • 也能夠把 nginx 日誌切割的配置文件放到 /etc/logrotate.d/ 目錄下面
  • logrotate.conf配置文件也包含了 logrotate.d目錄下面的子配置文件
  • 若是是 yum 安裝的 nginx
  • 默認會生成 /etc/logrotate.d/nginx 這個配置文件
  • 上圖是 /etc/logrotate.d/nginx 文件的內容
  • daily 表示天天切割
  • missingok 表示忽略錯誤
  • rotate 52 表示保留52個文件,每一個文件表明一天
  • 因此就是保留 52 天的記錄
  • compress 表示對文件進行壓縮
  • delaycompress 表示延遲壓縮
  • 原本壓縮文件是會壓縮昨天切割好的文件的
  • 可是延遲壓縮就不會壓縮昨天的文件,而是壓縮前天的文件
  • notifempty 表示不切割空的文件
  • create 640 nginx adm 表示建立新文件的權限,全部者,所屬組
  • sharedscripts 表示加載一段腳本
  • endscript 表示腳本結束
  • 這兩行中間的內容就是腳本內容
  • 如圖,/var/log/niginx/ 目錄是nginx自帶的日誌文件目錄
  • 能夠看到,目錄裏面已經切割壓縮了幾個日誌文件
postrotate
		if [ -f /var/run/nginx.pid ]; then
				kill -USR1 'cat /var/run/nginx.pid'
		fi
  • 這是shell 腳本,會在天天切割完 nginx 日誌文件以後執行
  • 這個腳本的目的是當切割完日誌文件後
  • 從新載入配置文件,這樣就能夠生成新的日誌文件
  • 若是不執行這個腳本的話
  • 好比說原來的日誌文件是 1.log,切割以後變成了 2.log
  • 1.log就消失了,可是日誌服務會寫新的日誌進 1.log
  • 而 1.log 文件不存在,這樣就會發生錯誤
  • 執行上面的腳本重載配置文件後,就會生成新的 1.log 文件
  • 這樣日誌服務就能夠正常運轉

  • vi /etc/logrotate.d/nginx 編輯 nginx 日誌配置文件
  • 如圖,修改一下配置文件
  • 定義了兩個目錄,/var/log/nginx/*.log 是默認的日誌文件目錄
  • 後面加上 /data/logs/*.log 是新添加的日誌文件目錄
  • 對這兩個目錄內的 .log 結尾的文件都會執行大括號內的指令
  • 在本來的指令之間,添加了 dateext
  • 這是讓切割的日誌文件名稱以 日期爲後綴
  • rotate 7 保留7個文件,原來是52的
  • 而後保存退出
  • 如圖,logrotate 命令能夠執行切割指令
  • 選項 -v 能夠看到執行的過程
  • /etc/logrotate.d/nginx 是配置文件
  • 意思就是按照這個配置文件的內容執行切割
  • 看顯示的內容,由於某些緣由沒有進行切割
  • 多是沒有達到切割的條件的緣由
  • 選項 -f 能夠忽略這些因素,進行強制切割
  • 如圖,修改 /etc/logrotate.d/nginx 的內容
  • 原來的目錄是 /data/logs/.log 如今修改成 /data/logs/bbs/.log 保存退出
  • 而後使用 logrotate -v /etc/logrotate.d/nignx 執行切割
  • 沒有成功,由於如今沒到切割的時間
  • 因此使用 logrotate -vf /etc/logrotate.d/nignx 進行強制切割
  • 如圖,信息顯示成功切割了 /data/logs/bbs/bbs.access.log 文件
  • 如圖,cd /data/logs/bbs/ 目錄,使用 ls 查看內容
  • 能夠看到,成功切割了 bbs.access.log-20191102 文件出來

靜態文件過時緩存

  • 瀏覽器打開一個頁面
  • 第一次向服務器請求文件以後
  • 頁面的不少靜態文件會保存在瀏覽器緩存裏面
  • 若是第二次請求這些靜態文件的話,好比圖片,js,css等
  • 瀏覽器並不會把請求發送到服務器
  • 而是直接在瀏覽器緩存裏面調用
  • 因此這些靜態文件的第二次請求並不會被記錄到服務器訪問日誌裏面
  • 由於實際上並無訪問服務器
  • 可是若是某一個靜態文件進行了修改
  • 瀏覽器第二次請求從緩存調用的話,就會形成瀏覽器的數據
  • 和服務器的數據不一致,這樣顯然不合理
  • 因此須要在服務器對靜態文件設置一個過時時間
  • 瀏覽器向服務器請求了一個靜態文件後
  • 這個靜態文件擁有一個過時時間
  • 到達過時時間後,瀏覽器就會從新向服務器請求新的文件
  • 而不是調用緩存
  • 對靜態文件設置過時時間,首先打開虛擬主機的配置文件
  • cd /etc/nginx/conf.d/
  • vi 打開 tom.bbs.conf 配置文件
  • 如圖,在匹配靜態文件的代碼塊裏面
  • 添加一行 expires 1d;
  • 意思是過時時間設置爲 1天
  • 還可使用別的單位,好比小時,分鐘之類的
  • 小時是 h,這裏設置爲 1d 也就是 1天
  • 而後保存退出
  • 如圖,f12 打開瀏覽器調試界面
  • 把以前請求下來的圖片的 請求路徑複製下來
  • 如圖,使用 curl -x127.0.0.1:80 -I 請求url
  • 這裏 -x 後面是請求鏈接的 ip地址和端口
  • 由於這個圖片在本機,因此這裏使用本機迴環地址 127.0.0.1
  • 端口是 80 這是nginx 默認的端口
  • 選項 -I 表示只查看 header 信息
  • 最後是請求鏈接的 url
  • 下面能夠看到返回的 header 信息
  • 並無發現有文件過時時間的信息
  • 而後 nginx -t && nginx -s reload 檢查重載一下剛纔修改的配置文件
  • 而後從新使用 curl 測試一下剛纔圖片的url
  • 如圖,修改配置文件後,從新檢測圖片的 url
  • 返回的header信息裏面,多了一行 cache-control: max-age=86400
  • 86400 的單位是 秒
  • 這裏能夠安裝一個工具 yum install -y bc
  • 這個工具能夠輔助計算過時時間
  • 如圖,輸入 bc 回車 進入程序
  • 進入程序後,輸入 86400/3600 回車
  • 系統返回 24
  • 由於 86400 的單位是 秒
  • 1分鐘=60秒,1小時=60分鐘,因此 1小時 = 60秒 * 60 = 3600秒
  • 86400/3600 = 24小時 = 1天
  • 這個數據跟配置文件裏面設置的過時時間爲 1天 是一致的
  • 這就表示配置文件設置過時時間生效了
  • 超過1天的靜態文件,瀏覽器就會從新向服務器請求新的數據
  • 而不是繼續使用緩存中的過時數據

nginx防盜鏈

  • 有兩個網站 a 和 b
  • 在 a 網站調用 b 網站的資源,好比圖片,文章等
  • 叫作盜鏈
  • 沒有通過 b 網站的贊成,就調用了 b 網站的資源
  • 這顯然不合理
  • 因此須要在 b 網站上面作防盜鏈設置
  • 這樣 a 網站就不能隨意調用 b 網站的資源了
  • 先安裝一個工具 yum install -y lrzsz
  • 這個工具能夠從 windows 上傳下載文件到 linux 裏面
  • cd /tmp/tomblog/ 目錄
  • 這個目錄是博客的根目錄
  • 如圖,使用 rz 命令,從windows 上傳了 1.png 文件到 tomblog 目錄裏面
  • 如圖,在論壇網站發一個帖子
  • 選擇添加圖片,這裏選擇使用網絡圖片
  • 直接寫 http://tomblog/1.png 的訪問路徑
  • 如圖,tomblog 目錄下面的 1.png 圖片就被成功調用了
  • 如圖,成功發表了這個帶圖片的帖子
  • cd /etc/nginx/conf.d 進入配置文件的目錄
  • vi tom.blog.conf 編輯博客的配置文件
  • 上圖是配置文件的內容,如今須要添加修改一些內容
  • 如圖,添加這個代碼塊
  • 這個代碼塊是針對 png,gif,js,css 等這裏寫了的後綴名的文件作的設置
  • 若是向網站請求 png等後綴名的文件,就會使用大括號內的設置
  • 防盜鏈的設置主要是如下代碼的做用
valid_referers none blocked server_names *.blog.com;
        if ($invalid_referer) {
                return 403;
        }
  • 這個代碼塊產生防盜鏈的做用
  • valid_referers 是白名單
  • none 表示當 referers 爲空就能夠訪問
  • 若是從 a 網站訪問 b網站的資源
  • 那麼這個請求的 referers(來源) 就是 a網站
  • 若是從 b 網站訪問 b網站的資源,那麼 referers(來源) 就爲空
  • 這裏寫 none 意思就是 referers 爲空就是白名單
  • 也就能夠訪問,若是referers不爲空,也就是來源是別的網站
  • 那就不是白名單,也就不能訪問
  • 通常合法的訪問鏈接都是 http:// 或者 https:// 開頭的鏈接
  • 也有一些鏈接不以 http開頭,而是直接 www 開頭或者別的開頭
  • 這樣的鏈接就是非法鏈接
  • 這裏使用了 blocked
  • 那麼不以 http 開頭的鏈接,也是合法的鏈接
  • 若是不使用 blocked ,那麼不以http開頭的鏈接就是非法鏈接
  • 不能訪問,blocked 能夠用也能夠不用,通常不多用到
  • server_names 就是服務器的名字,後面接能夠訪問的服務器名稱
  • 符合這裏定義的服務器名稱的服務器就表示是白名單服務器
  • 就能夠訪問這個網站上面定義的資源
  • 不符合的就是黑名單
  • 這裏設置的白名單服務器名稱是 *.blog.com
    • 是正則表達式,*.blog.com
  • 表示服務器名稱以 .blog.com 結尾的服務器
  • 就是白名單服務器,能夠訪問
  • 下面的 invalid_referer 就是黑名單的意思
  • return 403 表示黑名單服務器訪問上面定義的資源就返回 403
  • 不符合白名單的訪問全都是黑名單
  • 而後保存退出,使用 nginx -t && nginx -s reload 檢測重載配置文件
  • 如圖,訪問論壇網站剛纔發的帖子
  • f12 打開調試頁面
  • f5 重載頁面
  • 能夠看到,原本在帖子裏面的圖片已經不見了
  • 右邊查看請求的文件,能夠看到
  • 1.png 的請求,返回的狀態碼是 403
  • 這樣就表示 防盜鏈設置成功了
  • 如圖,進入tomblog的配置文件,原本 root 是在 location 代碼塊內部的
  • 如今把 location 刪除,讓 root 成爲全局的變量
  • 這樣訪問網站資源的時候,就能夠直接在域名後面訪問根目錄裏面的內容了
  • 保存退出,nginx -t && nginx -s reload 檢測重載一下配置文件
  • 如圖,在 tomblog 的域名後面,直接訪問 1.png 就能夠訪問到這個圖片
  • 若是配置文件內,不設置 root 全局變量
  • 這裏就不能直接從域名後面直接訪問根目錄內的文件
  • 由於沒有定義 root 全局變量瀏覽器就不能直接從根目錄訪問資源
相關文章
相關標籤/搜索