nginx日誌相關和啟用壓縮,快取的設定

2021-07-26 14:42:04 字數 4768 閱讀 2364

與nginx日誌相關的主要有2個指令

1)log_format 用來設定日誌的格式

2)access_log 用來指定日誌檔案的存放路徑,格式和快取大小

兩條指令既可以在http之間配置,也可以在server之間配置

語法格式:

log_format  name format

name表示定義的格式名稱  format表示格式,有乙個預設的combined格式,相當於apache的combined格式

也可以自定義乙份日誌的格式,但應該注意,log_format設定的name在nginx的配置檔案中不能重複

注意:假設將nginx伺服器作為web容器,位於負載均衡裝置,squid,nginx反向**過後就不能

再收到客戶端的真實ip位址,因為在客戶端和web伺服器之間增加了中間層,所以web伺服器無法

拿到客戶端的真實ip,通過$remote_addr變數拿到的將是反向**伺服器的ip位址

但是,在反向代

理伺服器中可以增加x-forward-for資訊,用於記載源客戶端ip和源客戶端請求的server位址

此時,就要用到log_format來自定義日誌格式,讓日誌記錄x-forward-for資訊中的ip位址,也就是

真實ip;eg:自定義乙個mylogformat

在日誌格式中,變數$remote_addr和http_x_forwarded_for用來記錄ip位址

$remote_user用來記錄遠端客戶端使用者名稱

$time_local 用來記錄訪問時間和時區

$request 用來記錄請求url與http協議

$status 用來記錄請求狀態,例如成功200 未找到404 

$body_bytes_sent 用來記錄傳送給客戶端的檔案內容的大小

$http_referer 用來記錄從哪個頁面鏈結訪問過來的

$http_user_agent 用來記錄客戶端瀏覽器的相關資訊

access_log用來指定日誌檔案的存放路徑,語法:

access_log path [format [ buff=size | off ]]

path表示檔案路徑  format表示log_format設定的日誌格式的name

buff=size表示設定記憶體緩衝區的大小,eg buff=32k

1)若不想開啟access_log日誌,可以關閉  access_log off

2)若使用預設combined格式,可以使用 access_log /var/log/access.log

3)若使用自定義格式,可以使用 access_log mylogformat /var/log/access.log

4)在nginx0.7.4之後的版本,可以包含變數,eg 虛擬網域名稱為 nj.com 

日誌格式可以為 access_log /var/log/nj.com.access.log

但,使用變數後會有一些限制:

a. nginx程序設定的使用者和組都必須有該路徑的建立檔案許可權,

假如nginx的使用者名稱和使用者組為www ,/var/run/資料夾的使用者和組為root,日誌檔案將不能建立

b. 緩衝將不會起作用

c. 對於每一條日誌記錄,nginx都必須先開啟,然後記錄,然後關閉,為了提高包含變數的日誌檔案

存放路徑的效能,必須使用open_log_file_cache來設定日誌檔案描述符的快取

open_log_file_cache max=n [inactive=time] [min_uses=n] [valid=time] | off

引數說明如下:

max 設定快取中的最大檔案描述符的數量,如果超過該值,使用lru策略清除

inactive 設定時間,在該時間內未使用該描述符,自動刪除

min_uses 在inactive設定的時間內,某日誌檔案被使用的次數超過該值就會被計入快取

valid 設定多久檢查一次,看看設定的檔案是否存在,預設為60s

off 禁止使用快取

eg:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;

nginx日誌檔案的切割

生產環境中由於訪問日誌檔案增長速度很快,日誌太大會嚴重影響伺服器的效率,同時為了方便對日誌

進行分割計算,必須隨日誌檔案進行切割,常見的方式為按天切割

nginx不支援像apache一樣使用cronolog來設定日誌輪轉,但是可以使用如下方式來實現日誌檔案的切割:

mv /var/run/nj.access.log /var/run/20170205.log

kill -usr1 nginx主程序號

首先重新命名日誌檔案,然後用kill -usr1訊號讓nginx重新生成乙個日誌檔案

shell指令碼內容如下:

#nginx日誌切割的指令碼

#每天凌晨定時執行

#指定日誌檔案路徑

logs_path="/var/logs/"

#建立資料夾

mkdir -p $$(date -d "yesterday" +"%y")/$(date -d "yesterday" +"%m")/

#重新命名檔案

mv $access.log $$(date -d "yesterday" +"%y")/

$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%y%m%d").log

#傳送訊號

kill -usr1 `cat /usr/local/var/run/nginx.pid`  #自己nginx.pid的真實路徑

定時任務的寫法如下:

crontab -e 新建乙個定時任務

#輸入以下內容

00 00 * * * /bin/bash /www/nginx/rotate.sh #上邊那個指令碼的pathname

nginx的壓縮輸出配置:

gzip是一種壓縮技術,經過壓縮的**訪問更快,需要伺服器和瀏覽器同時支援,現在大多數瀏覽器都已經支援了

nginx的配置(放到http之間):

#開啟gzip壓縮

顯示目錄的設定:

location /

本地快取設定:

可以通過expires設定header頭來實現

語法:expires [time|epoch|max|off] 預設值off,作用域 http server location

可以控制http應答中的expires和cache-control欄位,起到頁面快取的作用

time可以是正數|負數 expires頭標的值將通過當前系統時間+time獲得

epoch指定expires的值為:1 january,1970,00:00:01 gmt

max指定expires的值為:31 december 2037 23:59:59 gmt,

cache-control的值為10年

-1 指定expires的值永遠過期

cache-control的值由time的值決定

time為負數, cache-control:no-cache

time為正數,cache-control:max-age=# ,#為time的值

off表示不修改expires和cache-control的值

一些不經常修改的靜態檔案可以設定expires

Nginx配置 啟用gzip壓縮

1.功能描述 2.實現 3.最終效果 4.參考文件 版本 nginx 1.16.1。引數詳解 開啟或關閉gzip模組 實時壓縮輸出 gzip on off 開啟或關閉gzip靜態檔案處理模組 提前壓縮,需要nginx中新增上http gzip static module模組 gzip static ...

nginx日誌切割壓縮儲存

nginx每天會產生大量的訪問日誌,而且有些要求保留幾個月的日誌以便分析,如果不加入自動切割壓縮,儲存空間很快會被撐爆 下面用shell指令碼配合計畫任務crontab對nginx日誌進行自動切割壓縮 vim cut nginx log.sh bin bash year date y month d...

nginx啟用gzip壓縮js等檔案

gzip壓縮,是一種 速度優化技術,也是一把seo優化利器,許多 都採用了這種技術,以達到提公升網頁開啟速度 縮短網頁開啟時間的目的。我們的圖書館系統,剛開始沒有啟動gzip壓縮的時候,差不多二十多秒,才能完全開啟,經過gzip壓縮後,測試4.2s就可以完全開啟.通過這兩組資料的對比,gzip壓縮優...