Nginx常見基本配置---日誌、HTTP執行階段

日誌

Nginx通過 ngx_ http_ log_ module來對日誌的記錄進行配置。

記錄自定義變量

指令: log_ format
語法: log_ format name [escape = default | json | none] string …;
默認值: log_ format combined “...";
環境: http
含義:配置日誌的格式。

絕大部分請求信息都可以通過 Nginx現有的變量來獲取,例如常見的 Cookie、 IP地址、 User_ Agent、請求體大小、單個請求頭、 server_ ip、後端節點和端口號等。

當然還有自定義變量,如需將自定義變量存放到日誌中,只需簡單的兩步。

  • 使用自定義變量前需要先進行初始化:
set $a '123';
  • 爲自定義變量添加日誌格式:
log_format main '$remote_addr $a'

日誌格式規範

日誌經常會被用來分析和查找問題,爲了提升日誌的可讀性,需要規範日誌的格式以減少解析日誌時出現的麻煩。

在 Nginx 1. 11. 8版本之後,提供了[ escape = default | json | none]配置,它可以讓 Nginx在記錄變量時使用 JSON格式或默認字符。如果使用默認字符則會被轉義,特別是當 POST請求中包含中文字符或需要轉義的字符時,默認轉義的操作會使日誌無法記錄明確的信息。

日誌記錄推薦使用如下格式:

使用 escape = json則日誌內容不會被轉義,中文字符可以直接在日誌裏面顯示。日誌的格式採用 JSON的方式進行配置,對後期的數據採集會有很大的幫助,當在日誌裏添加新的變量時,不會影響日誌分析的流程。

日誌存儲

日誌存儲通過 access_ log來完成。

指令: access_ log
語法: access_ log path [format [buffer = size] [gzip[ = level]] [flush = time] [if = condition]]; access_ log off;
默認值: access_ log logs/ access. log combined;
環境: http、 server、 location、 if in location、 limit_ except 
  • 在同一個階段中,支持多種格式和文件的收集。
  • 若不在同一個階段,則會以最小配置階段的 access_ log爲指定文件。
  • 支持壓縮存儲,可以減少硬盤的使用空間。
  • 支持只記錄某些狀態。
  • 支持關閉日誌記錄。
    指令 access_ log只記錄訪問日誌,關於錯誤信息的日誌記錄在 error_ log上,示例如下:

注意:日誌應該存放在獨立的硬盤上,最好和系統盤及存放 Nginx配置文件的硬盤相互獨立,避免讓日誌硬盤的 I/ O影響服務器的其他服務。在高併發的情況下,可能每秒會生成幾十兆的日誌。

HTTP執行階段

Nginx對請求的處理髮生在多個 HTTP執行階段,前面介紹的指令都是在這些階段中執行的,瞭解這些階段的執行順序和用途,對後續原生模塊、第三方模塊的學習,以及使用 Lua開發新的功能都有非常重要的作用。

HTTP執行階段配置在 ngx_ http_ core_ module中,下載 Nginx的源碼包後在 src/ http/ ngx_ http_ core_ module. h中可以看到。

下面是 ngx_ http_ core_ module. h中的一段源碼:

通過上述配置,可以看出 Nginx包含 11個階段,當請求進入 Nginx後,每個 HTTP執行階段的作用見下表(按照執行順序進行排列)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章