For the complete documentation index, see llms.txt. This page is also available as Markdown.

Nginx 配置文件

概述

Nginx 是使用一个 master 进程来管理多个 worker 进程提供服务。master 负责管理 worker 进程,而 worker 进程则提供真正的客户服务,worker 进程的数量一般跟服务器上 CPU 的核心数相同,worker 之间通过一些进程间通信机制实现负载均衡等功能。Nginx 进程之间的关系可由下图表示:

Nginx 服务启动时会读入配置文件,后续的行为则按照配置文件中的指令进行。Nginx 的配置文件是纯文本文件,默认安装 Nginx 后,其配置文件均在 /usr/local/nginx/conf/ 目录下。其中,nginx.conf 为主配置文件。配置文件中以 # 开始的行,或者是前面有若干空格或者 TAB 键,然后再跟 # 的行,都被认为是注释。这里只是了解主配置文件的结构。

Nginx 配置文件是以 block(块)形式组织,每个 block 都是以一个块名字和一对大括号 “{}” 表示组成,block 分为几个层级,整个配置文件为 main 层级,即最大的层级;在 main 层级下可以有 event、http 、mail 等层级,而 http 中又会有 server block,server block中可以包含 location block。即块之间是可以嵌套的,内层块继承外层块。最基本的配置项语法格式是“配置项名 配置项值1 配置项值2 配置项值3 ... ”;

每个层级可以有自己的指令(Directive),例如 worker_processes 是一个main层级指令,它指定 Nginx 服务的 Worker 进程数量。有的指令只能在一个层级中配置,如worker_processes 只能存在于 main 中,而有的指令可以存在于多个层级,在这种情况下,子 block 会继承 父 block 的配置,同时如果子block配置了与父block不同的指令,则会覆盖掉父 block 的配置。指令的格式是“指令名 参数1 参数2 … 参数N;”,注意参数间可用任意数量空格分隔,最后要加分号。

下图是 Nginx 配置文件通常结构图示。

Nginx 服务的基本配置项

Nginx 服务运行时,需要加载几个核心模块和一个事件模块,这些模块运行时所支持的配置项称为基本配置;基本配置项大概可分为以下四类:

  • 用于调试、定位的配置项;

  • 正常运行的必备配置项;

  • 优化性能的配置项;

  • 事件类配置项;

各个配置项的具体实现如下:





#以守护进程 Nginx 运行方式
#语法:daemon off | on;
#默认:daemon on;

#master / worker 工作方式
#语法:master_process on | off;
#默认:master_process on;

#error 日志设置
#                   路径        错误级别
#语法:error_log    /path/file  level;
#默认:error_log    logs/error.log  error;
#其中/path/file是一个具体文件;level是日志的输出级别,其取值如下:
#   debug info notice warn error crit alert emerg
#从左至右级别增大;若设定一个级别后,则在输出的日志文件中只输出级别大于或等于已设定的级别;

#处理特殊调试点
#语法:debug_points [stop | abort]
#这个设置是来跟踪调试 Nginx 的;

#仅对指定的客户端输出 debug 级别的日志
#语法:debug_connection [IP | DIR]

#限制 coredump 核心转储文件的大小
#语法:worker_rlimit_core   size;

#指定 coredump 文件的生成目录
#语法:working_directory    path;



#定义环境变量
#语法:env  VAR | VAR=VALUE;
#VAR 是变量名,VALUE 是目录;

#嵌入其他配置文件
#语法:include  /path/file;
#include 配置项可以将其他配置文件嵌入到 Nginx 的 nginx.conf 文件中;

#pid 的文件路径
#语法:pid  path/file;
#默认:pid  logs/nginx.pid;
#保存 master 进程 ID 的 pid 文件存放路径;

#Nginx worker 运行的用户及用户组
#语法:user username    [groupname];
#默认:user nobody nobody;

#指定 Nginx worker进程可打开最大句柄个数
#语法:worker_rlimit_nofile limit;

#限制信号队列
#语法:worker_rlimit_sigpending limit;
#设置每个用户发给 Nginx 的信号队列大小,超出则丢弃;



#Nginx worker 进程的个数
#语法:worker_process   number;
#默认:worker_process   1;

#绑定 Nginx worker 进程到指定的 CPU 内核
#语法:worker_cpu_affinity  cpumask [cpumask...]

#SSL 硬件加速
#语法:ssl_engine   device;

#系统调用 gettimeofday 的执行频率
#语法:timer_resolution t;

#Nginx worker 进程优先级设置
#语法:worker_priority  nice;
#默认:worker_priority  0;


#一般有以下几种配置:
#1、是否打开accept锁
#   语法格式:accept_mutex [on | off];

#2、lock文件的路径
#   语法格式:lock_file  path/file;

#3、使用accept锁后到真正建立连接之间的延迟时间
#   语法格式:accept_mutex_delay Nms;

#4、批量建立新连接
#   语法格式:multi_accept [on | off];
#
#5、选择事件模型
#   语法格式:use [kqueue | rtisg | epoll | /dev/poll | select | poll | eventport];

#6、每个worker进行的最大连接数
#   语法格式:worker_connections number;

HTTP 核心模块的配置

具体可以参看《Nginx 中 HTTP 核心模块配置

以下是在 Ubuntu 12.04 系统成功安装 Nginx 之后的主配置文件:

参考资料:

《深入理解Nginx》

Nginx模块开发入门

Nginx开发从入门到精通

Last updated