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的版本号
转载于:https://blog.51cto.com/zengestudy/2115357