通用语法
user nobody;
worker_processes 8;
error_log varlog/nginx/error.log error;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 50000;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr [$time_local] "$request" '
'$status $bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main buffer=32k;
...
}
块配置项
块配置项由块配置项名和大括号组成,块配置项可以嵌套,内层块继承外层块。内外层块配置冲突时,由解析配置的模块决定。
#配置项名
events{
...
}
http {
upstream backend {
#配置项名 配置项值;
server 127.0.0.1:8080;
}
gzip on;
server {
location /webstatic {
gzip off;
}
}
}
配置项值可以是数字、字符串、正则表达式。每个配置项可以有多个空格分隔的配置项值。
若配置项值中包含语法符号,需要用引号括起来。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ';
配置项值可否使用单位,取决于解析模块
基本配置
Nginx至少加载几个核心模块和一个事件类模块。这些模块运行时支持的配置项为基本配置,即其他模块都依赖的配置项
用于调试和查错的配置项
是否以守护进程方式运行Nginx
daemon on|off;
Nginx默认以守护进程运行,为了方便跟踪调试,可以设置为关闭守护模式
是否以master/worker方式工作
master_process on|off;
默认开启,关闭时,master不会fork出worker进程,而是自己处理请求。方便调试。
error日志
error_log path level;
默认为error_log logs/error.log error;
path可以是文件;也可以是/dev/null,此时不输出日志;也可以是stderr,输出到标准错误文件。
level是输出级别(debug/info/notice/warn/error/crit/alert/emerg),从左至右依次增大。输出级别大于等于level的日志。
如果需要设置为debug,在configure时必须加上--with-debug参数。
是否处理几个特殊调试点
debug_points [stop|abort];
Nginx在一些关键的错误逻辑中设置了调试点。设置为stop,在代码执行到这些点时,发出SIGSTOP信号用于调试。设置为abort,会产生coredump文件,使用gdb来查看Nginx当时状态。
对指定的客户端输出debug级别的日志。
debug_connection [IP|CIDR];
事件类配置项,需要放在events中。
events {
debug_connection 10.224.66.14;
debug_connection 10.224.57.0/24;
}
来自以上ip的请求会输出debug级别的日志。该配置,同样需要在configure加入--with-debug参数。
限制coredump核心转储的文件大小
worker_rlimit_core size;
Linux在进程出错或收到信号而终止时,会将进程当前内存内容(核心映像)写入core文件,以便调试,即核心转储。限制文件大小避免占用过多容量。
指定coredump目录
working_directory path;
worker进程工作目录,设置coredump文件的目录
正常运行的配置项
定义环境变量
env VAR|VAR=VALUE;
env TESTPATH=/tmp/;
导入其他文件
include path;
尅是绝对路径或相对路径,可以是明确文件名或含有通配符*的文件名,同时导入多个文件
include mime.types;
include vhost/*.conf;
pid文件路径
pid path;
该文件影响Nginx可否运行
worker进程运行的用户及用户组
user username [groupname];
默认user nobody nobody,configure指定了参数--user=username和--group=groupname时,使用参数指定的用户及用户组。
worker进程可以打开的最大文件数
worker_rlimit_nofile limit;
限制信号队列
worker_rlimit_sigpending limit;
限制每个用户发往Nginx的信号队列大小,队列满时,用户信号会被丢弃。
性能优化配置项
worker进程个数
worker_processes number;
如果没有阻塞式调用,进程数应和CPU核数一样。如果有,则应多于CPU核数。
绑定worker到CPU内核
worker_cpu_affinity cpumask[cpumask...];
每个worker进程独享CPU,在内核调度策略上实现完全并发。
worker_processes 4;
workercpuaffinity 1000 0100 0010 0001;
SSL硬件加速
ssl_engine device;
有SSL硬件加速设备时,该配置加快SSL协议处理速度。openssl engine -t命令检查硬件加速设备。
worker优先级
worker_priority nice;
默认为0,优先级由静态优先级和内核根据进程执行情况动态调整(±5)决定,nice是静态优先级(-20 ~ +19),越小优先级越高。希望Nginx占有更多系统资源,可将nice调小,但不建议比内核进程的nice(通常为-5)还小。
事件类配置项
是否打开accept锁
accept_mutex [on|off];
默认打开,关闭时建立TCP连接耗时更短,但worker负载不均,不建议关闭。
lock文件路径
lock_file path;
默认为logs/nginx.lock,accept锁打开时,是原子锁。当不支持原子锁时,需要该文件,利用文件锁实现accept锁,此时该配置才生效。
使用accept锁后到建立连接之间的延迟
accept_mutex_delay Nms;
默认50ms,开始accept锁后,同时只有一个worker拿到锁,取不到时,立即返回。当worker取锁失败,至少等待accept_mutex_delay后才能再次尝试取锁。
因为拿到锁后,需要等待accept_mutex_delay才能建立连接,建立连接后拿到锁的worker才会释放锁。
批量建立连接
multi_accept on|off;
默认off,事件模型通知有新连接时,尽可能对本次调度中所有的请求都建立连接。
选择事件模型
use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
默认自动选择最佳模型。linux有三种模型(poll/select/epoll)。epoll是性能最好的,默认选择该模型。
worker最大连接数
worker_connections number;
每个worker可以同时处理的最大连接数。