摘要:在時(shí)間段內(nèi),日志文件最少使用幾次,該日志文件描述符記入緩存,默認(rèn)是次。例子中,設(shè)置緩存最多緩存?zhèn)€日志文件描述符,內(nèi)如果緩存中的日志文件描述符至少被被訪問次,才不會(huì)被緩存關(guān)閉。每隔分鐘檢查緩存中的文件描述符的文件名是否還存在。
前言
Nginx日志對(duì)于統(tǒng)計(jì)、系統(tǒng)服務(wù)排錯(cuò)很有用。Nginx日志主要分為兩種:access_log(訪問日志)和error_log(錯(cuò)誤日志)。通過訪問日志我們可以得到用戶的IP地址、瀏覽器的信息,請(qǐng)求的處理時(shí)間等信息。錯(cuò)誤日志記錄了訪問出錯(cuò)的信息,可以幫助我們定位錯(cuò)誤的原因。本文將詳細(xì)描述一下如何配置Nginx日志。
設(shè)置access_log訪問日志主要記錄客戶端的請(qǐng)求??蛻舳讼騈ginx服務(wù)器發(fā)起的每一次請(qǐng)求都記錄在這里??蛻舳薎P,瀏覽器信息,referer,請(qǐng)求處理時(shí)間,請(qǐng)求URL等都可以在訪問日志中得到。當(dāng)然具體要記錄哪些信息,你可以通過log_format指令定義。
語(yǔ)法access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 設(shè)置訪問日志 access_log off; # 關(guān)閉訪問日志
path 指定日志的存放位置。
format 指定日志的格式。默認(rèn)使用預(yù)定義的combined。
buffer 用來指定日志寫入時(shí)的緩存大小。默認(rèn)是64k。
gzip 日志寫入前先進(jìn)行壓縮。壓縮率可以指定,從1到9數(shù)值越大壓縮比越高,同時(shí)壓縮的速度也越慢。默認(rèn)是1。
flush 設(shè)置緩存的有效時(shí)間。如果超過flush指定的時(shí)間,緩存中的內(nèi)容將被清空。
if 條件判斷。如果指定的條件計(jì)算為0或空字符串,那么該請(qǐng)求不會(huì)寫入日志。
另外,還有一個(gè)特殊的值off。如果指定了該值,當(dāng)前作用域下的所有的請(qǐng)求日志都被關(guān)閉。
作用域可以應(yīng)用access_log指令的作用域分別有http,server,location,limit_except。也就是說,在這幾個(gè)作用域外使用該指令,Nginx會(huì)報(bào)錯(cuò)。
以上是access_log指令的基本語(yǔ)法和參數(shù)的含義。下面我們看一幾個(gè)例子加深一下理解。
基本用法access_log /var/logs/nginx-access.log
該例子指定日志的寫入路徑為/var/logs/nginx-access.log,日志格式使用默認(rèn)的combined。
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
該例子指定日志的寫入路徑為/var/logs/nginx-access.log,日志格式使用默認(rèn)的combined,指定日志的緩存大小為32k,日志寫入前啟用gzip進(jìn)行壓縮,壓縮比使用默認(rèn)值1,緩存數(shù)據(jù)有效時(shí)間為1分鐘。
使用log_format自定義日志格式Nginx預(yù)定義了名為combined日志格式,如果沒有明確指定日志格式默認(rèn)使用該格式:
log_format combined "$remote_addr - $remote_user [$time_local] " ""$request" $status $body_bytes_sent " ""$http_referer" "$http_user_agent"";
如果不想使用Nginx預(yù)定義的格式,可以通過log_format指令來自定義。
語(yǔ)法log_format name [escape=default|json] string ...;
name 格式名稱。在access_log指令中引用。
escape 設(shè)置變量中的字符編碼方式是json還是default,默認(rèn)是default。
string 要定義的日志格式內(nèi)容。該參數(shù)可以有多個(gè)。參數(shù)中可以使用Nginx變量。
下面是log_format指令中常用的一些變量:
變量 | 含義 |
---|---|
$bytes_sent | 發(fā)送給客戶端的總字節(jié)數(shù) |
$body_bytes_sent | 發(fā)送給客戶端的字節(jié)數(shù),不包括響應(yīng)頭的大小 |
$connection | 連接序列號(hào) |
$connection_requests | 當(dāng)前通過連接發(fā)出的請(qǐng)求數(shù)量 |
$msec | 日志寫入時(shí)間,單位為秒,精度是毫秒 |
$pipe | 如果請(qǐng)求是通過http流水線發(fā)送,則其值為"p",否則為“." |
$request_length | 請(qǐng)求長(zhǎng)度(包括請(qǐng)求行,請(qǐng)求頭和請(qǐng)求體) |
$request_time | 請(qǐng)求處理時(shí)長(zhǎng),單位為秒,精度為毫秒,從讀入客戶端的第一個(gè)字節(jié)開始,直到把最后一個(gè)字符發(fā)送張客戶端進(jìn)行日志寫入為止 |
$status | 響應(yīng)狀態(tài)碼 |
$time_iso8601 | 標(biāo)準(zhǔn)格式的本地時(shí)間,形如“2017-05-24T18:31:27+08:00” |
$time_local | 通用日志格式下的本地時(shí)間,如"24/May/2017:18:31:27 +0800" |
$http_referer | 請(qǐng)求的referer地址。 |
$http_user_agent | 客戶端瀏覽器信息。 |
$remote_addr | 客戶端IP |
$http_x_forwarded_for | 當(dāng)前端有代理服務(wù)器時(shí),設(shè)置web節(jié)點(diǎn)記錄客戶端地址的配置,此參數(shù)生效的前提是代理服務(wù)器也要進(jìn)行相關(guān)的x_forwarded_for設(shè)置。 |
$request | 完整的原始請(qǐng)求行,如 "GET / HTTP/1.1" |
$remote_user | 客戶端用戶名稱,針對(duì)啟用了用戶認(rèn)證的請(qǐng)求 |
$request_uri | 完整的請(qǐng)求地址,如 "https://daojia.com/" |
下面演示一下自定義日志格式的使用:
access_log /var/logs/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指令定義了一個(gè)main的格式,并在access_log指令中引用了它。假如客戶端有發(fā)起請(qǐng)求:https://suyunfe.com/,我們看一下我截取的一個(gè)請(qǐng)求的日志記錄:
112.195.209.90 - - [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" "-"
我們看到最終的日志記錄中$remote_user、$http_referer、$http_x_forwarded_for都對(duì)應(yīng)了一個(gè)-,這是因?yàn)檫@幾個(gè)變量為空。
設(shè)置error_log錯(cuò)誤日志在Nginx中是通過error_log指令實(shí)現(xiàn)的。該指令記錄服務(wù)器和請(qǐng)求處理過程中的錯(cuò)誤信息。
語(yǔ)法配置錯(cuò)誤日志文件的路徑和日志級(jí)別。
error_log file [level]; Default: error_log logs/error.log error;
第一個(gè)參數(shù)指定日志的寫入位置。
第二個(gè)參數(shù)指定日志的級(jí)別。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值??梢钥吹狡淙≈捣秶前淳o急程度從低到高排列的。只有日志的錯(cuò)誤級(jí)別等于或高于level指定的值才會(huì)寫入錯(cuò)誤日志中。默認(rèn)值是error。
基本用法error_log /var/logs/nginx/nginx-error.log
它可以配置在:main, http, mail, stream, server, location作用域。
例子中指定了錯(cuò)誤日志的路徑為:/var/logs/nginx/nginx-error.log,日志級(jí)別使用默認(rèn)的error。
open_log_file_cache每一條日志記錄的寫入都是先打開文件再寫入記錄,然后關(guān)閉日志文件。如果你的日志文件路徑中使用了變量,如access_log /var/logs/$host/nginx-access.log,為提高性能,可以使用open_log_file_cache指令設(shè)置日志文件描述符的緩存。
語(yǔ)法open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
max 設(shè)置緩存中最多容納的文件描述符數(shù)量,如果被占滿,采用LRU算法將描述符關(guān)閉。
inactive 設(shè)置緩存存活時(shí)間,默認(rèn)是10s。
min_uses 在inactive時(shí)間段內(nèi),日志文件最少使用幾次,該日志文件描述符記入緩存,默認(rèn)是1次。
valid:設(shè)置多久對(duì)日志文件名進(jìn)行檢查,看是否發(fā)生變化,默認(rèn)是60s。
off:不使用緩存。默認(rèn)為off。
基本用法open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
它可以配置在http、server、location作用域中。
例子中,設(shè)置緩存最多緩存1000個(gè)日志文件描述符,20s內(nèi)如果緩存中的日志文件描述符至少被被訪問2次,才不會(huì)被緩存關(guān)閉。每隔1分鐘檢查緩存中的文件描述符的文件名是否還存在。
總結(jié)Nginx中通過access_log和error_log指令配置訪問日志和錯(cuò)誤日志,通過log_format我們可以自定義日志格式。如果日志文件路徑中使用了變量,我們可以通過open_log_file_cache指令來設(shè)置緩存,提升性能。
另外,在access_log和log_format中使用了很多變量,這些變量沒有一一列舉出來,詳細(xì)的變量信息可以參考Nginx官方文檔
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39805.html
摘要:于年發(fā)布,聚焦于高性能,高并發(fā)和低內(nèi)存消耗問題。二服務(wù)的啟??刂圃谥v解配置文件參數(shù)前,讓我們先來了解一下的啟停操作吧。在講解配置項(xiàng)之前,讓我們先了解一下各個(gè)塊的作用。配置最大連接數(shù)設(shè)置允許每個(gè)同時(shí)開啟的最大連接數(shù),默認(rèn)值。 一、nginx簡(jiǎn)介、 ??nginx(發(fā)音engine x)是俄羅斯軟件工程師Igor Sysoev開發(fā)的免費(fèi)開源web服務(wù)器軟件。nginx于2004年發(fā)布,聚焦...
摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 本文已獲得原作者CodeSheep授權(quán)。showImg(https://segmentfault.com/img/remote/1460000015646704); 概述 在前面《Ngi...
摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 本文已獲得原作者CodeSheep授權(quán)。showImg(https://segmentfault.com/img/remote/1460000015646704); 概述 在前面《Ngi...
摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 showImg(https://segmentfault.com/img/remote/1460000015385948); 概述 在前面《Nginx服務(wù)器開箱體驗(yàn)》 一文中我們從開箱...
摘要:基本配置文件和變量詳解基本配置文件運(yùn)行的用戶進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)。允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)。如果主體超過緩沖區(qū)大小,則完整主體或其一部分將寫入臨時(shí)文件。該指令在配置的,和區(qū)塊使用。 Nginx基本配置文件和變量詳解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx運(yùn)行的用戶 user nginx; # nginx進(jìn)程數(shù),建議設(shè)置為等于C...
閱讀 3414·2023-04-25 22:04
閱讀 2206·2021-11-22 15:29
閱讀 2175·2021-10-11 10:57
閱讀 1417·2021-09-24 09:48
閱讀 3156·2021-09-09 09:34
閱讀 2556·2021-09-02 15:21
閱讀 2405·2019-08-30 15:53
閱讀 1144·2019-08-30 14:07