與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壓縮優...