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

Was this helpful?