nginx 配置文件解释

配置文件示例

常用配置: nginx.conf

配置区域层级

main
    events
    http
        server
            location
    stream
    mail

参数解析

core核心模块

user

Syntax: user user [group];
Default:    user nobody nobody;
Context:    main
定义运行nginx进程的用户和用户组

worker_processes

Syntax: worker_processes number | auto;
Default: ---
worker_processes 1;
Context:    main
设置nginx进程数量,一般设置成cpu数量*2
例: 4核心cpu
worker_processes 8
设置成auto则nginx自动根据系统确定数量

worker_cpu_affinity

Syntax: worker_cpu_affinity cpumask ...;
Default:    —
Context:    main
设置进程CPU绑定,有利于利用多核CPU资源
cpu数量 和 进程数量相关
例:
    4核心 4个nginx work
    worker_cpu_affinity 1000 0100 0010 0001

error_log

Syntax: error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
Default:    error_log logs/error.log error;
Context:    main, http, mail, stream, server, location
设置错误日志文件file路径
stderr直接输出到屏幕
syslog输出到syslog日志系统
[debug | info | notice | warn | error | crit | alert | emerg] 记录错误等级

accept_mutex

指令格式  :   accept_mutex on | off;
默认值:    accept_mutex on;
使用区域:   events;
设置网络连接的序列化。 在Nginx服务器的多进程下,有可能出现惊群(Thundering herd problem)问题,
指的是当某一个时刻只有一个网络连接到来时,多个睡眠进程会被同时唤醒,但只有一个进程可以获得连接。
如果每次唤醒的进程数目太多,会影响一部分系统性能。。
为了解决这样的问题,Nginx配置中包含这样一条指令accept_mutex,
当其设置为开启时,将会对多个Nginx进程接受连接进行序列化,阻止多个进程对连接的争抢。
其语法结构为 accept_mutex on|off. 此指令默认为开启状态。
关于nginx解决惊群的方法可以参见http://blog.csdn.net/russell_tao/article/details/7204260

pid

Syntax: pid file;
Default:    pid nginx.pid;
Context:    main
设置nginx的pid文件路径

events {}

Syntax: events { ... }
Default:    —
Context:    main
设置events区域的参数

include

Syntax: include file | mask;
Default:    —
Context:    任何区域
包含、引用文件

multi_accept

示例  :   multi_accept on | off;
默认值:    multi_accept off;
区域  :   events
设置worker接受多个新连接,默认一个worker一次只接受一个新连接,multi_accept设置为on后能接受多个,有利于性能提升

use

 使用哪种网络模型(Connection processing methods)
 select 默认
 poll 默认
 kqueue BSD系统使用
 epoll linux 2.6以上
 /dev/poll|eventport  solaris unix系统使用
 linux使用 use epoll;

worker_connections

 Syntax:    worker_connections number;
 Default: —
 worker_connections 512;
 Context:   events

 设置nginx每个worker最大同时连接数
 与worker_processes一起限制了系统最大允许连接数worker_processes*worker_connections

worker_rlimit_nofile

Syntax: worker_rlimit_nofile number;
Default:    —
Context:    main

设置进程打开文件数量限制

http核心模块

default_type

Syntax: default_type mime-type;
Default:    
default_type text/plain;
Context:    http, server, location

设置默认文件类型mime-type

error_page

Syntax: error_page code ... [=[response]] uri;
Default:    —
Context:    http, server, location, if in location

设置如果出现指定的HTTP错误状态码,返回给客户端显示的对应uri地址。
error_page 404 /404.html;

msie_padding

Syntax: msie_padding on | off;
Default:    msie_padding on;
Context:    http, server, location

关闭或开启MSIE浏览器的msie_padding特性,
若启用选项,nginx会为response头部填满512字节,这样就阻止了相关浏览器会激活友好错误界面,
因此不会隐藏更多的错误信息。

server_tokens

Syntax: server_tokens on | off;
Default:    server_tokens on;
Context:    http, server, location

当打开server_tokens的时候,返回详细nginx版本信息

server_names_hash_bucket_size

Syntax: server_names_hash_bucket_size size;
Default:    server_names_hash_bucket_size 32|64|128;
Context:    http

保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。
参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,
使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,
最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。
因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.

client_header_buffer_size

Syntax: client_header_buffer_size size;
Default:  client_header_buffer_size 1k;
Context:    http, server

用于设置客户端请求的Header头缓冲区大小,大部分情况1KB大小足够。
不能超过large_client_header_buffers缓冲区大小的设置

large_client_header_buffers

Syntax: large_client_header_buffers number size;
Default:    large_client_header_buffers 4 8k;
Context:    http, server

客户请求头缓冲大小
nginx默认会用client_header_buffer_size这个buffer来读取header值,
如果header过大,它会使用large_client_header_buffers来读取
如果设置过小而HTTP头/Cookie过大会报400错误nginx 400 bad request

client_max_body_size

Syntax: client_max_body_size size;
Default:    client_max_body_size 1m;
Context:    http, server, location

#设置客户端能够上传的文件大小,默认为1m

sendfile

Syntax: sendfile on | off;
Default:    sendfile off;
Context:    http, server, location, if in location

sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,
对于普通应用,设为on。
如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。

常用变量