nginx配置系列(三)日志配置(ngx_http_log_module)

      網友投稿 1440 2025-04-01

      ngx_http_log_module 模塊

      ngx_http_log_module模塊按指定的格式記錄訪問日志。請求在處理結束時,會按請求路徑的配置上下文記訪問日志,通過訪問日志,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息。你也可以記錄錯誤日志,通過錯誤日志,你可以得到系統某個服務或server的性能瓶頸等。

      配置 access_log 來記錄訪問日志

      訪問日志主要記錄客戶端的請求。客戶端向Nginx服務器發起的每一次請求都記錄在這里。客戶端IP,瀏覽器信息,referer,請求處理時間,請求URL等都可以在訪問日志中得到。當然具體要記錄哪些信息,你可以通過log_format指令來定義。

      語法:

      access_log path [``format` `[buffer=size] [``gzip``[=level]] [flush=``time``] [``if``=condition]]; ``# 設置訪問日志``access_log off; ``# 關閉訪問日志

      path 指定日志的存放位置。

      format 指定日志的格式。默認使用預定義的combined。

      buffer 用來指定日志寫入時的緩存大小。默認是64k。

      gzip 日志寫入前先進行壓縮。壓縮率可以指定,從1到9數值越大壓縮比越高,同時壓縮的速度也越慢。默認是1。

      flush 設置緩存的有效時間。如果超過flush指定的時間,緩存中的內容將被清空。

      if 條件判斷。如果指定的條件計算為0或空字符串,那么該請求不會寫入日志。

      還有一個特殊的值off。如果指定了該值,當前作用域下的所有的請求日志都被關閉。

      配置作用域

      可以配置 access_log 指令的作用域分別有http,server,location,limit_except。也就是說,在這幾個作用域外使用該指令,Nginx會報錯。

      以上是 access_log 指令的基本語法和參數的含義。下面我們看一幾個例子加深一下理解。

      基本用法

      access_log ``/home/wwwlogs/nginx-access``.log

      該例子指定日志的寫入路徑為/home/wwwlogs/nginx-access.log,日志格式使用默認的combined。

      access_log ``/home/wwwlogs/nginx-access``.log buffer=32k ``gzip` `flush=1m

      該例子指定日志的寫入路徑為/home/wwwlogs/nginx-access.log,日志格式使用默認的combined,指定日志的緩存大小為32k,日志寫入前啟用gzip進行壓縮,壓縮比使用默認值1,緩存數據有效時間為1分鐘。

      使用 log_format 自定義日志格式

      Nginx預定義了名為combined日志格式,如果沒有明確指定日志格式默認使用該格式:

      log_format combined ``'$remote_addr - $remote_user [$time_local] '`` ``'"$request" $status $body_bytes_sent '`` ``'"$http_referer" "$http_user_agent"'``;

      如果不想使用Nginx預定義的格式,可以通過log_format指令來自定義。

      語法

      nginx配置系列(三)日志配置(ngx_http_log_module)

      log_format name [escape=default|json] string ...;

      name 格式的名稱。在 access_log 指令中引用。

      escape 設置變量中的字符編碼方式是json還是default,默認是default。

      string 要定義的日志格式內容。該參數可以有多個。參數中可以使用Nginx變量。

      下面是 log_format 指令中常用的一些變量:

      $remote_addr 客戶端的IP地址(代理服務器,顯示代理服務器的ip)

      $remote_user 記錄遠程客戶端的用戶名稱,針對啟用了用戶認證的請求,通常情況下為“-”

      $time_local 記錄訪問時間和時區,如"24/May/2017:18:31:27 +0800"

      $request 記錄請求的url以及請求方法

      $status 響應狀態碼 例如:200成功、404頁面找不到等…

      $bytes_sent 發送給客戶端的總字節數

      $body_bytes_sent 給客戶端發送的主體內容字節數,不包括響應頭的大小

      $http_user_agent 客戶端瀏覽器信息

      $http_x_forwarded_for 可以記錄客戶端IP,通過代理服務器來記錄客戶端的IP地址。當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的前提是代理服務器也要進行相關的x_forwarded_for設置。

      $http_referer 記錄用戶是從哪個鏈接訪問過來的

      $time_iso8601 標準格式的本地時間,形如“2017-05-24T18:31:27+08:00”

      $msec 日志寫入時間,單位為秒,精度是毫秒

      $request_length 請求長度(包括請求行,請求頭和請求體)

      $request_time 請求處理時長,單位為秒,精度為毫秒,從讀入客戶端的第一個字節開始,直到把最后一個字符發送給客戶端進行日志寫入為止

      下面演示一下自定義日志格式的使用:

      access_log ``/home/wwwlogs/nginx-access``.log main``log_format main ``'$remote_addr - $remote_user [$time_local] "$request" '`` ``'$status $body_bytes_sent "$http_referer" '`` ``'"$http_user_agent" "$http_x_forwarded_for"'``;

      使用 log_format 指令定義了一個main的格式,并在access_log指令中引用了它。假如客戶端有發起請求:

      nginx.css3er.com,注意,如果你要測試的話,請把nginx.css3er.com換成對應你自己的域名進行訪問。看一下我截取的一個請求的日志記錄:

      111.231.138.248 - - [20``/Feb/2018``:12:12:14 +0800] ``"GET / HTTP/1.1"` `200 190 ``"-"` `"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"` `"-"

      我們看到最終的日志記錄中

      r

      e

      m

      o

      t

      e

      u

      s

      e

      r

      remote_user、

      remoteu ser、http_referer、$http_x_forwarded_for都對應了一個-,這是因為這幾個變量為空。

      配置 error_log 來記錄錯誤日志

      錯誤日志在Nginx中是通過 error_log 指令實現的。該指令記錄服務器和請求處理過程中的錯誤信息。

      語法

      配置錯誤日志文件的路徑和日志級別。

      error_log ``file` `[level];``Default: ``error_log logs``/error``.log error;

      第一個參數指定日志的寫入路徑。

      第二個參數指定日志的級別。level可以是debug, info, notice, warn, error, crit, alert,emerg 中的任意值。可以看到其取值范圍是按緊急程度從低到高排列的。只有日志的錯誤級別等于或高于level指定的值才會寫入錯誤日志中。默認值是error。

      基本用法

      error_log ``/home/wwwlogs/nginx-error``.log crit;

      它可以配置在:main, http, mail, stream, server, location 作用域。

      例子中指定了錯誤日志的路徑為:/home/wwwlogs/nginx-error.log,日志級別使用的是crit。

      open_log_file_cache

      每一條日志記錄的寫入都是先打開文件再寫入記錄,然后關閉日志文件。如果你的日志文件路徑中使用了變量,如 access_log /home/wwwlogs/$host/nginx-access.log,為了提高性能,可以使用 open_log_file_cache 指令設置日志文件描述符的緩存。當然了,即使你在路徑中使用了變量,你也可以選擇不用配置 open_log_file_cache。

      語法

      open_log_file_cache max=N [inactive=``time``] [min_uses=N] [valid=``time``];

      max 設置緩存中最多容納的文件描述符數量,如果被占滿,采用LRU算法將描述符關閉。

      inactive 設置緩存存活時間,默認是10s。

      min_uses 在inactive時間段內,日志文件最少使用幾次,該日志文件描述符記入緩存,默認是1次。

      valid:設置多久對日志文件名進行檢查,看是否發生變化,默認是60s。

      off:不使用緩存。默認為off。

      基本用法

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

      它可以配置在http、server、location作用域中。

      在上面的例子中,設置緩存最多緩存1000個日志文件描述符,20s內如果緩存中的日志文件描述符至少被被訪問2次,才不會被緩存關閉。每隔1分鐘檢查緩存中的文件描述符的文件名是否還存在。

      尾聲

      在Nginx中我們可以通過 access_log 和 error_log 指令配置訪問日志和錯誤日志,通過 log_format 我們可以自定義日志格式。如果日志文件路徑中使用了變量,我們可以通過open_log_file_cache指令來設置緩存,提升性能。

      另外,在 access_log 和 log_format 中使用了很多變量,這些變量并沒有一 一列舉出來,詳細的變量信息可以參考:nginx官方文檔

      HTML HTTP Nginx

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel怎樣快速填充序號?excel中批量快速填充上序號的四種方法介紹
      下一篇:wps文字無法打開數據源是怎么回事(為什么顯示wps文字無法打開數據源)
      相關文章
      亚洲av成人综合网| 亚洲2022国产成人精品无码区| 亚洲av无码一区二区三区网站 | 亚洲精品在线观看视频| 亚洲精品无码专区在线在线播放 | 亚洲日韩在线观看免费视频| 亚洲AV成人潮喷综合网| 国产成人精品亚洲一区| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲视频在线精品| 久久亚洲av无码精品浪潮| 亚洲精品无码激情AV| 国产精品亚洲mnbav网站 | 91亚洲国产在人线播放午夜| 亚洲自偷自偷精品| 中文字幕亚洲精品| 亚洲人成网网址在线看| 亚洲国产区男人本色在线观看| 欧洲 亚洲 国产图片综合| 亚洲性无码一区二区三区| 亚洲AV无码专区在线电影成人| 久久亚洲色WWW成人欧美| 国产偷国产偷亚洲高清人| 亚洲人成无码www久久久| 国产亚洲视频在线播放| 久久精品国产69国产精品亚洲| 亚洲精品国产精品乱码在线观看| 亚洲AV综合色一区二区三区| 亚洲一区二区三区电影| 亚洲人成电影在线观看网| 亚洲熟女乱色一区二区三区| 另类小说亚洲色图| 久久亚洲AV无码西西人体| 久久亚洲国产成人亚| 亚洲精品日韩中文字幕久久久| 67194在线午夜亚洲| 亚洲精品国产suv一区88| 亚洲AV无码一区二三区| 亚洲色精品88色婷婷七月丁香| 久久精品国产亚洲AV麻豆~| 亚洲男女性高爱潮网站|