是否以守护进程的方式运行nginxphp
# 默认on daemon on|off;
是否以master/worker方式工做html
# 默认on,指定了是否以master-worker进程的方式运行,若是设置为off,那么全部的请求将只会由master进程处理 master_process on|off;
error日志的设置前端
# 指定了error日志的目录和日志级别,第二个参数用于指定目录,第三个参数用于指定日志级别,总共有:debug、info、notice、warn、error、crit、alert、emerg,这些日志级别中,从左往右优先级依次增大,默认为info error_log logs/error.log error;
是否处理几个特殊的调试点node
# 指定了调试点 debug_points stop|abort
仅对指定的客户端输出debug级别的日志nginx
debug_connection IP|CIDR
该参数主要用于events模块中,针对指定的ip或者网段记录debug日志:web
events { debug_connection 10.224.66.14; debug_connection 10.224.57.0/24; }
须要注意的是,在使用该参数时,必需要确保在进行configure时已经加入了--with-debug
参数,不然不会生效;正则表达式
限制coredump核心转储文件的大小算法
worker_rlimit_core size;
在Linux操做系统中,若是一个进程因为错误或者收到信号而终止时,会将进程执行时的内存内容写入一个文件(core文件),以做为调试之用,这就是所谓的核心转储。在nginx进程宕机时,其就会产生核心转储文件,并且该文件通常都有几个G,于是若是不限制该文件的大小,那么颇有可能会把服务器磁盘占满。该参数的做用就是限制核心转储文件的大小的。浏览器
指定coredump文件生成目录缓存
working_directory path;
该参数指定了在生成核心转储文件时,将该文件存放的目录。
定义环境变量
env TESTPATH=/tmp/
这个配置项可让用户直接设置操做系统上的环境变量。
嵌入其余配置文件
include /path/file
用于将其余的配置文件引入进来,该路径能够是绝对路径,也能够是相对路径,若是是相对路径,则是基于nginx的配置目录而指定的。
pid文件的路径
pid path/file
用于指定存储nginx的master进程运行所使用的进程id的文件的路径。
Nginx的worker进程运行的用户及用户组
user username [groupName]
用于指定worker进程运行时所基于的用户和用户组,默认都为nobody,这里若是不指定groupName,那么组名就与用户名一致。
指定nginx的worker进程能够打开的最大句柄描述符个数
worker_rlimit_nofile limit;
设置一个worker进程可以打开的最大句柄描述符个数。
限制信号队列
worker_rlimit_sigpending limit;
设置了每一个用户可以发往nginx的信号队列的大小,若是信号队列已满,那么新发送的信号将会被丢弃。
nginx的worker进程的个数
worker_processes 1;
用于指定nginx运行时worker进程的个数,在nginx运行时,每一个worker进程都是单线程运行的,这里须要判断worker进程是否进行了阻塞性操做,若是有这样的操做,那么稍微多配置一些worker进程比较好,若是没有,那么将worker进程数量设置得与CPU数量同样可以获得更好的性能。
绑定nginx的worker进程到指定的CPU内核
worker_cpu_affinity cpumask [cpumask...]
将worker进程与指定的CPU进行绑定,这样可以防止多个worker进程抢占同一个CPU,从而避免出现同步问题。以下是一个4核CPU的配置方式:
worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001;
须要注意的是,worker_cpu_affinity
仅对于Linux系统有效。
SSL硬件加速
ssl_engine device;
若是服务器上有SSL硬件加速设备,那么就能够进行配置以加快SSL协议的处理速度。用户可使用OpenSSL提供的命令来查看是否有SSL硬件加速设备:
openssl engine -t
系统调用gettimeofday的执行频率
timer_resolution -t
默认状况下,每次内核的事件调用返回时,都会执行一次gettimeofday,在早期的Linux版本中,获取系统时间都会有一次从内核态到用户态的数据复制,其代价比较高,可是在最新的x86-64体系架构中,gettimeofday仅仅只是一次vsyscall,其仅仅只是对共享内存页中的数据的访问,代价不大。
nginx的worker进程优先级
worker_priority nice;
用于设置nginx的worker进程的优先级,其中,nice的默认值为0。在Linux操做系统中,当有多个进程在竞争CPU执行资源时,其就会根据每一个进程设置的优先级来优先分配执行权限,而且所分配的时间片也要高一些。优先级的值在-20~+19
之间,数值越低优先级越高,通常建议将nginx的优先级设置得更低一些,这样才能保证其执行的权限,可是建议不要设置得比内核的进程优先级(其值为-5)还要低。
是否打开accept锁
accept_mutex [on|off]
accept_mutex
参数用于控制是否启用负载均衡锁,其默认值为on,该锁会保证各个worker轮流的、序列化的与新客户端创建链接,而且当某个worker的链接数达到了worker_connections
配置的最大链接数的7/8时,该锁会下降该worker将要新创建的链接数,从而保证各个worker的负载均衡。
lock文件的路径
lock_file path/file;
该参数指定了lock文件的路径。nginx会使用操做系统提供的锁功能,但若是操做系统不支持原子锁,此时才会使用文件锁来实现lock。若是accept_mutex
参数设置为off,那么该参数将不会生效。
使用accept锁后到真正创建链接之间的延迟时间
accept_mutex_delay Nms;
若是一个worker进程尝试获取锁失败了,那么其就会等待该参数指定的时间段以后再次尝试获取锁,该值默认为500ms。
批量创建新链接
multi_accept [on|off];
当事件模型通知这次有新的链接创建请求时,尽量的对本次调度中客户端发起的的全部TCP请求都创建链接,该值默认为off。
选择事件模型
use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
nginx所选用的事件模型,其会自动使用最适合的模型。在Linux操做系统下支持poll、select和epoll三种,其中epoll的性能是最高的。
每一个worker的最大链接数
worker_connections number;
指定了每一个worker进程可以创建的最大链接数。
listen address:port[default(deprecated)|default_server|[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|deferred|bind|ipv6only=[on|off]|ssl]]
这里的IP地址和端口号的配置很是灵活,若是不配置端口号,则默认为80端口,而ip地址则可使用通配符进行匹配,如:
listen 127.0.0.1:8080; listen *:8080;
listen的各个参数含义以下:
default
和default_server
:将当前server块做为整个web服务器的默认server块,若是没有server设置了该参数,则将nginx.conf中的第一个server块做为默认server块。设置该参数的缘由在于,若是当前请求没有匹配到任意一个server,那么就使用第一个server处理请求;backlog=num
:指定了TCP中的backlog队列的大小,默认值为-1。在TCP的三次握手过程当中,进程此时尚未开始处理监听句柄,而这些请求都会放在backlog队列中,当backlog队列满时,客户端新的握手请求就会被拒绝;rcvbuf=size
:设置监听句柄的SO_RCVBUF参数;sndbuf=size
:设置监听句柄的SO_SNDBUF参数;accept_filter
:设置accept过滤器,只对FreeBSD操做系统有用;deferred
:若是设置了该参数,若是用户发起了TCP链接请求,那么在三次握手成功以后内核也不会调度相应的进程处理请求,而是在用户真正的发送了数据包以后才会将请求发送给具体的进程进行处理;bind
:绑定当前端口/地址对,如127.0.0.1:8000
,只有同时对一个端口监听多个地址时才会生效;ssl
:在当前监听的端口上创建的链接必须基于SSL协议;语法:server_name name [...]; 默认:server_name ""; 配置块:server
server_name
后能够跟多个主机名称,在处理HTTP请求时,其会将请求中的Host头部的主机名与server块中的主机名进行匹配,若是遇到多个server块中的主机名匹配,那么将会按照以下规则与其进行匹配:
若是没有找到可以匹配的主机名,那么就会按照以下规则寻找server块:
语法:server_names_hash_bucket_size size; 默认:server_names_hash_bucket_size 32|64|128; 配置块:http、server、location
server_names_hash_bucket_size
的做用主要是进行server name的hash匹配的,在进行hash匹配时,该参数指定了hash表的每一个bucket占用的内存大小。语法:server_names_hash_max_size size; 默认:server_names_hash_max_size 512; 配置块:http、server、location
server_names_hash_max_size
指定了进行server name查找时使用的hash表的大小,该值越大,那么占用的内存越多,可是查询的效率也越高。语法:server_name_in_redirect on|off; 默认:server_name_in_redirect on; 配置块:http、server或者location
语法:location [=|~|~*|^~|@] /uri/{...} 配置块:server
location的主要做用是与请求中的URI进行匹配,若是匹配了,就使用location块中的配置来处理用户请求。以下是location的匹配规则:
=
表示把URI做为字符串,以便于参数中的uri作彻底匹配。例如:
location = / { # 只有当用户请求是/时,才会使用该location下的配置 }
~
表示匹配URI时是字母大小写敏感的;
~*
表示匹配URI时是字母大小写不敏感的;
^~
表示匹配URI时只须要其前半部分与uri参数匹配便可。例如:
location ^~ /images/ { # 以/images/开始的请求都会匹配上 }
@
表示仅用于nginx服务内部请求之间的重定向,带有@
的location不直接处理用户请求;
能够在uir参数里使用正则表达式。如:
location ~* \.(gif|jpg|jpeg)$ { # 匹配以.gif、.jpg、.jpeg结尾的请求 }
关于location的匹配须要说明的一点是,location的匹配是有顺序的,当一个请求匹配了多个location时,实际上这个请求会被第一个location处理。
语法:root path; 默认:root html; 配置块:http、server、locationo、if
示例以下:
location /download/ { root /opt/web/html/; }
这种配置方式会将/download/开始的请求映射到/opt/web/html/目录下,好比某个请求为/download/test/index.html,那么nginx就会到服务器上查找/opt/web/html/download/test/index.html文件。
语法:alias path; 配置块:location;
与root
同样,alias也是配置资源文件路径的,可是alias是location后的路径以别名的方式替换目标路径的指定部分,好比以下配置:
location /conf { alias /usr/local/nginx/conf; }
此时若是一个请求为/conf/index.html,那么其前缀/conf将会与当前location匹配,而且会将alias参数替换请求uri中匹配的部分,也就是转换后的uri为/usr/local/nginx/conf/index.html。
语法:index file...; 默认:index index.html; 配置块:http、server、location
该配置块的主要做用是将用户访问的某个地址映射到首页,在进行首页查找时,会按照顺序查询index参数后的文件,若是存在,则将其返回,若是不存在,则继续查找下一个。好比以下示例:
location / { root path; index /index.html /html/index.php /index.php }
当接收到用户的/
请求后,其首先会查询/path/index.html
文件是否存在,若是不存在,则查询下一个/path/html/index.php
是否存在,若是存在,则直接返回,依此类推。
语法:error_page code[code...][=|=answer-code]uri|@named_location 配置块:http、server、location、if
该配置的主要做用是,若是当前请求返回了指定的状态码,那么就将其重定向到后面的错误页面。如:
error_page 404 /404.html error_page 502 503 504 /50x.html error_page 403 http://example.com/forbidden.html error_page 404 = @fetch;
须要注意的是,即便重定向了URI,返回的HTTP状态码仍是原来的状态码,若是须要修改状态码,可使用=
来修改原来的状态码,如:
error_page 404 =200 /empty.gif; error_page 404 =403 /forbidden.gif;
也能够不指定修改后的状态码,而是由重定向后的请求决定其返回的状态码:
error_page 404 = /empty.gif;
在重定向后,也能够不修改URI,而是将这个请求重定向到另外一个location中进行处理,好比:
location / { error_page 404 @fallback; } location @fallback { proxy_pass http://backend; }
语法:recursive_error_pages [on|off]; 默认:recursive_error_pages off; 配置块:http、server、location;
语法:try_files path1[path2]uri; 配置块:server、location
该参数的主要做用是在用户请求到达以后,会依次尝试其后指定的各个path路径,若是匹配上了,那么就将该路径的值直接返回。若是都没有匹配上,那么就会使用最后的uri做为默认处理路径。示例如:
try_files /system/maintenance.html $uri $uri/index.html $uri.html @other location @other { proxy_pass http://backend; }
语法:client_body_in_file_only on|clean|off; 默认:client_body_in_file_only off; 配置块:http、server、location
语法:client_body_in_single_buffer on|off; 默认:client_body_in_single_buffer off; 配置块:http、server、location
client_body_buffer_size
指定的大小,那么该请求仍是会存储到磁盘文件中。语法:client_header_buffer_size size; 默认:client_header_buffer_size 1k; 配置块:http、server
large_client_header_buffers
参数定义的buffer处理。语法:large_client_header_buffers number size; 默认:large_client_header_buffers 48k; 配置块:http、server
client_header_buffer_size
所能存储的大小时使用,该参数定义了每一个header所能传输的数据的大小,以及最多可以传输多少个header。若是单个header大小超限,则会返回414(Request URI too large)状态码,若是是header个数超限,则会返回400(Bad Request)状态码。语法:client_body_buffer_size size; 默认:client_body_buffer_size 8k/16k; 配置块:http、server、location
Content-Length
,而且其标识的长度小于上述参数指定的长度,那么就会自动下降这次请求所使用的buffer大小。语法:client_body_temp_path dir-path[level1[level2[level3]]] 默认:client_body_temp_path client_body_temp; 配置块:http、server、location
该参数的主要做用是指定了存储http包体的磁盘目录,后面的level表示能够有几级子目录,这是由于若是请求比较多,那么生成的文件就会比较多,频繁的访问同一个目录可能会下降性能,于是能够设置多级子目录用于文件的存放;
须要注意的是,上述level参数表示的是所生成的目录名占有目标文件名字符的个数,好比生成的目标文件名为00000123456
,而上述参数按以下配置:
client_body_temp_path /opt/nginx/client_temp 1 2;
那么nginx就会截取目标文件名的最后1个字符做为一级目录,倒数第二个和第三个总共两个字符做为二级目录,最终文件将会存储在以下目录:
/opt/nginx/client_temp/6/45/00000123456
nginx在生成目标文件时,其文件名是以顺序递增的整数进行命名的。
语法:connection_pool_size size; 默认:connection_pool_size 256; 配置块:http、server
语法:request_pool_size size; 默认:request_pool_size 4k; 配置块:http、server
connection_pool_size
内存池中进行申请;connection_pool_size
内存池,而只有在这次TCP链接关闭时才会销毁整个链接的内存池。语法:client_header_timeout time(默认单位:秒); 默认:client_header_timeout 60; 配置块:http、server、location
语法:client_body_timeout time(默认单位:秒); 默认:client_body_timeout 60; 配置块:http、server、location
语法:send_timeout time; 默认:send_timeout 60; 配置块:http、server、location
语法:reset_timeout_connection on|off; 默认:reset_timeout_connection off; 配置块:http、server、location
FIN_WAIT_1
、FIN_WAIT_2
、TIME_WAIT
状态的TCP链接。语法:lingering_close off|on|always; 默认:lingering_close on; 配置块:http、server、location
语法:lingering_time time; 默认:lingering_time 30s; 配置块:http、server、location
lingering_close
启用后,这个配置项主要是针对大文件的传输用的,好比当某个请求传输的数据超过了max_client_body_size
时,nginx就会向该客户端发送413(Request entity too large)状态码,可是某些客户端可能不会理会该状态码而仍是继续向服务器发送数据,此时nginx就会在该参数的超时时间以后直接关闭该链接。语法:lingering_timeout time; 默认:lingering_timeout 5s; 配置块:http、server、location
lingering_close
启用后,nginx在关闭链接前,会检测用户链接上是否还有未处理的数据,若是在该参数指定的时间以后尚未相应的数据到达,那么就会关闭该连接。语法:keepalive_disable [msie6|safari|none]... 默认:keepalive_disablemsie6 safari 配置块:http、server、location
语法:keepalive_timeout time(默认单位:秒); 默认:keepalive_timeout 75; 配置块:http、server、location
语法:keepalive_requests n; 默认:keepalive_requests 100; 配置块:http、server、location
语法:tcp_nodelay on|off; 默认:tcp_nodelay on; 配置块:http、server、location
语法:tcp_nopush on|off; 默认:tcp_nopush off; 配置块:http、server、location
语法:type {...}; 配置块:http、server、location
该配置项定义了MIME type到文件扩展名的映射。多个扩展名能够映射到同一个MIME type。例如:
types { text/html html; text/html conf; image/gif gif; image/jpeg jpg; }
语法:default_type MIME-type; 默认:default_type text/plain; 配置块:http、server、location
Content-Type
。语法:types_hash_max_size size; 默认:types_hash_max_size 1024; 配置块:http、server、location
语法:types_hash_max_size size; 默认:types_hash_max_size 1024; 配置块:http、server、location
语法:limit_except method...{...} 配置块:location
该配置项的主要做用是限制某些方法的请求的访问,后面的参数可取GET、HEAD、POST、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK或者PATCH。示例如:
limit_except GET { allow 192.168.1.0/32; deny all; }
上述配置将会限制全部的GET请求的访问,而容许其余方法的请求。
语法:client_max_body_size size; 默认:client_max_body_size 1m; 配置块:http、server、location
Content-Length
所表示的长度来判断其与当前参数是否符合,若是不符合,则直接返回给客户端413(Request too large)状态码。语法:limit_rate speed; 默认:limit_rate 0; 配置块:http、server、location、if
该配置主要是对客户端的请求进行每秒传输的字节大小进行限速,默认为0,表示不限速;
针对不一样的客户端,可使用$limit_rate
参数执行不一样的限速策略。如:
server { if ($slow) { set $limit_rate 4k; } }
语法:limit_rate_after time; 默认:limit_rate_after 1m; 配置块:http、server、location、if
limit_rate_after
指定的值以后才开始限速。语法:sendfile on|off; 默认:sendfile off; 配置块:http、server、location
语法:aio on|off; 默认:aio off; 配置块:http、server、location
语法:directio size|off; 默认:directio off; 配置块:http、server、location
语法:directio_alignment size; 默认:directio_alignment 512; 配置块:http、server、location
语法:open_file_cache max=N[inactive=time]|off; 默认:open_file_cache off; 配置块:http、server、location
文件缓存会在内存中存储如下三种信息:
上面的配置项的三个参数的含义以下:
示例以下:
open_file_cache max=1000 inactive=20s;
语法:open_file_cache_errors on|off; 默认:open_file_cache_errors off; 配置块:http、server、location
语法:open_file_cache_min_uses number; 默认:open_file_cache_min_uses 1; 配置块:http、server、location
open_file_cache
配合使用,若是在指定时间内访问该文件的次数小于该参数指定的次数,那么该文件仍是会被淘汰。语法:open_file_cache_valid time; 默认:open_file_cahce_valid 60s; 配置块:http、server、location
语法:ignore_invalid_headers on|off; 默认:ignore_invalid_headers on; 配置块:http、server
语法:underscores_in_headers on|off; 默认:underscores_in_headers off; 配置块:http、server
语法:if_modified_since [off|exact|before]; 默认:if_modified_since exact; 配置块:http、server、location
If-Modified-Since
头部中带上上次缓存的时间,服务器在接收到该请求时,会将服务器文件的修改时间与请求中的时间进行比较,若是文件在这以后有过修改,那么服务器就会正常的返回文件内容以及200状态码,若是文件没有修改过,那么说明浏览器中缓存的文件是最新的,此时就会返回304(Not Modified)状态码。If-Modified-Since
头部,在每次请求时都将文件内容返回,此时响应状态码为200;If-Modified-Since
头部包含的时间与将要返回的文件的上次修改时间作精确比较,若是没有匹配上,则返回200和文件的实际内容,若是匹配上了,则表示文件内容已是最新的,此时就会返回304(Not Modified)状态码,浏览器收到后会直接读取本地缓存;If-Modified-Since
头部指定的时间以前,那么就会向客户端返回304(Not Modified)状态码。语法:log_not_found on|off; 默认:log_not_found on; 配置块:http、server、location
语法:merge_slashes on|off; 默认:merge_slashes on; 配置块:http、server、location
/
,例如//test///a.txt
,在配置为on时,会将其匹配为location/test/a.txt
;若是配置为off,则不会匹配,URI将仍然是//test///a.txt
。语法:resolver address...; 配置块:http、server、location
设置DNS名字解析服务器的地址,如:
resolver 127.0.0.1 192.0.2.1;
语法:resolver_timeout time; 默认:resolver_timeout 30s; 配置块:http、server、location
语法:server_tokens on|off; 默认:server_tokens on; 配置块:http、server、location