nginx的核心配置

正常运行的必备配置:

1、user username [groupname];
指定运行worker进程的用户和组
2、pid /path/to/pidfile_name;
指定nginx的pid文件路径
3、worker_rlimit_nofile #;
指定一个worker进程所能够打开的最大文件句柄数
4、worker_rlimit_sigpending #;
设定每个用户能够发往worker进程的信号的数量


优化性能相关的配置:

1、worker_processes #;
worker进程的个数,进城数量直接影响性能,通常其数值为CPU物理核心数减1,如8核CPU,则为7
2、worker_cpu_affinity cpu_mask ...;
将nginx进程绑定在哪一颗cpu上,例如,worker_process 为6,则cpu掩码这样配置
worker_processes 6;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000;
3、ssl_engine device;
在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件设备
4、timer_resolution #;
默认情况下,每一次内核事件的调用在返回时,都会执行一次gettimeofday() 来更新nginx缓存时钟,早期linux内核中
执行gettimeofday() 代价很大,非常消耗性能,所以如果频繁执行,对性能影响很大。这个参数表示每隔多长时间才会由gettimeofday()来更新一次缓存时钟
现在的x86-64系统上,gettimeofday()代价比较小
5、work_priority nice;
nice值的范围是-20,19,值越小优先级越高



事件相关的配置:

1、accept_mutex on | off;
是否打开nginx的负载均衡锁(默认是打开的)。nginx可能会运行多个worker进程,用户的请求是由master进程调度给worker进程的,开启这个负载均衡锁,则可以将用户请求均衡的调度到各个worker进程上,通常一个worker进程的负载打到其上限的7/8,master就尽可能不再将请求调度至此worker。但这个调度是有性能代价的。
2、lock_file /path/to/lock_file;
lock文件,如果上面accept_mutex 设置为off,则该配置无效
3、accept_mutex_delay #ns;
accept锁模式中,一个worker进程为取得accept锁的等待时长; 如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁,默认是500ms
4、multi_accept {on | off};
是否允许一次性地响应多个用户请求,默认为off
5、use [epoll | rtsig | select | poll];
定义使用的事件模型,建议让nginx自动选择
6、worker_connections #;
每个worker能否并发响应的最大请求数;


用于调试nginx、定位问题: 只在调试nginx时使用

1、daemon [on | off];
是否让nginx运行于后台,默认为on,调试时可以设置为off,使得所有信息输出至控制台

2、master_process [on | off]
是否以master/worker模式运行nginx,默认为on,调试时可以设置为off,把master进程关闭,只启动一个worker方便追踪问题

3、error_log /path/to/error_log level;
错误日志文件及其级别,调试时可以使用debug级别,默认为error级别。但要求在编译时必须使用--with-debug 启动debug功能;



nginx的http功能:

必须使用虚拟主机来配置站点: 每一个虚拟主机使用一个server{}配置

server {

}


非虚拟主机的配置或公共配置,需要定义在server之外,http之内

http {
    directive value;
    ...
   
    server {
        listen : 监听的地址和端口;
        server_name: 
        }
    server {
        }
}


1、server {}
 定义一个虚拟主机,nginx仅支持使用基于主机名或ip的虚拟主机:
2、listen
 listen address [:port];
 listen port;
 listen unix:socker_file_path; 只能本机访问,基本不会用到
 default_server:  定义此server为http中默认的server,如果所有的server中没有任何一个listen使用此参数,则第一个server为默认server
 rcvbuf= SIZE: 接收缓冲大小
 sndbuf= SIZE:发送缓冲大小
 ssl:https server:
3、server_name name;
     server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头)
     当nginx收到用户请求时,会取出其首部的server的值,而后跟众server_name进行比较,比较方式:
     (1)先做精确匹配: www.magedu.com
     (2)左侧通配符匹配:*.magedu.com
     (3)右侧通配符匹配:www.*
     (4)正则表达式匹配: ~^.*\.magedu\.com$
 4、server_name_hash_bucket_size 32|64|128
  为了实现快速主机查找,nginx使用hash来保存主机名;
 5、location 【= | ~ | ~* |^~】uri {...}
 功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置,匹配到时,将被location块中的配置所处理,比如:
 http://www.magedu.com/images/logo.gif
 =: 精确匹配
 ~:  正则表达式模式匹配,匹配时区分字符大小写
 ~*:正则比到达时模式匹配,匹配时忽略字符大小写
 ^~:URI前半部分匹配,不检查正则表达式


文件路径相关定义:

1、root path;
设置web资源路径:用于指定请求的根文档目录;可以配置在http、server或者location中,
location / {
    root /www/htdocts;
}

location ^~ /images/ {
    root /web;
}
http://www.magedu.com/images/b.html 访问的是/web/images下的b.html
root作用是访问任何资源都是/web/ + URI 路径下的

2、alias path
用于配置路径别名,通常只用在location中
location / {
    root /www/htdocts;
}

location ^~ /images/ {
    alias /web;
}
alias作用是将 /web 映射为/images,URI中的image被web替换了 

3、index file ...;
    定义默认页面,可跟多个值
4、error_page code ... [=[response]] uri;
    当对于某个请求返回错误时,如果匹配上error_page指令中设定的code,则重定向到指定页面

5、try_files path1 [path2...] uri;
 当访问的文件不存在时,让用户访问指定的路径上的文件,改文件一定要存在,例如:
  location /documents/ {
          root /www/htdocs; ###root一定要配置
          try_files $uri /temp.html;
        }
   当用户访问http://wwww.magedu.com/document/test.html时,如果/www/htdocs/documents 路径下有test.html文件则能正常访问,如果文件不存在,则让用户访问/documents/temp.html文件


网络连接相关的设置:

1、keepalive_timeout time;
保持连接的超时时长,默认为75s
2、keepalive_requests n;
在一次长连接上允许承载的最大请求数
3、keepalive_disable  [msie6 | safari | none]
对指定的浏览器禁止使用长连接
4、tcp_nodelay on | off
对keepalive连接是否使用TCP_NODELAY选项,默认为on
5、client_header_timeout time;
读取http请求首部的超时时长, 服务器接收用户请求后,如果用户在一段时间内迟迟不发送数据,则认为超时. 默认都是60s
6、client_body_timeout time;
读取http请求包体的超时时长,默认60s
7、send_timeout time;
发送响应的超时时长,服务器将用户请求的数据发给客户端,在规定时间内得不到确认则认为超时,



对客户端请求的限制:

1、limit_except mothed
只允许用户通过制定的方法来访问web服务,如GET,POST等

2、client_max_body_size SIZE;
http情报包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检测,以避免无用的传输:

3、limit_rate speed;
限制客户端每秒传输的字节数,默认为0,表示不限制

4、limit_rate_after time:
nginx向客户端发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速。即nginx在传输指定的时间后,才开始限速。


文件操作的优化:

1、sendfile on | off;
是否启用 sendfile功能

2、aio on | off;
是否启用aio,一般只要系统支持,都要启用

3、open_file_cache max=N [inactive=time] | off;
是否打开文件缓存功能
max:用于定义缓存条目的最大值,当缓存满了后,将根据LRU算法进行置换(清理);
inactive: 某缓存条目在指定时长内,没有被访问过时,将自动被删除。默认为60s
open_file_cache off 表示关闭缓存
缓存的信息包括:
1、文件句柄、文件大小和上次修改时间
2、已经打开的目录结构
3、没有找到或者没有访问权限的信息

4、open_file_cache_error on | off;
是否缓存文件找不到或者没有权限访问等相关信息

5、open_file_cache_valid time;
多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s

6、open_file_cache_min_use #;
在inactive指定的时长内,被访问超出此处指定的次数时,才不被被删除。解释:有时候某条目被访问过,但访问次数很少,相对于别的被大量访问过的条目,
这种条目缓存价值不高,这个参数就是用来限制被缓存条目的最低访问次数,低于这个次数的就算被访问也不会被缓存



对客户端请求的特殊处理:

1、ignore_invalid_headers on | off;
 是否忽略不合法的http首部,on表示忽略,默认是on。如果设置为off表示,严格检查http首部是否合法,不合法则拒绝响应。只能用于server和http配置中

2、 log_not_found on | off;
是否将文件找不到的信息也记录到错误日志中,可以用户server 和location配置中

3、resolver address;
指定nginx使用的dns服务器地址, 即nginx使用指定的dns服务器地址,而不适用系统配置的dns

4、resover_timeout time;
指定DNS解析超市时长,默认是30s(时间有点长)

5、server_tokens on | off;
是否在错误页面中显示nginx的版本号