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执行阶段的作用见下表(按照执行顺序进行排列)。

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