重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Nginx的配置是以模块为单位来组织的,每一个模块包含一个或多个指令,指令是配置文件中的最小配置单元,一切配置项皆为指令。如http核心模块中的include、default_type、sendfile指令,都属于http模块。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网页空间、营销软件、网站建设、玉门网站维护、网站推广。注意:以下配置中的“上下文”表示指令可以配置在哪些模块中。 main:顶层配置,约束服务器的行为 1 2 3 1、服务器级别核心配置 指令 上下文 语法 默认值 功能描述 user main usernobodynobyd; nobody 以哪个用户权限运行工作线程 daemon main daemonyes; yes nginx是否以守护进程运行 worker_processes main worker_processesnumber; 1 配置工作进程数。传统的web服务器(如apache)都是同步阻塞模型,一请求一进(线)程模式,当进(线)程数增达到一定程度后,更多CPU时间浪费在线程和进程切换当中,性能急剧下降,所以负载率不高。Nginx是基于事件的非阻塞多路复用(epoll或kquene)模型,一个进程在短时间内就可以响应大量的请求。建议将该值设置<=cpu核心数量,一般高于cpu核心数量不会带来好处,反而可能会有进程切换开销的负面影响。 worker_connections events worker_connectionsnumber; 1024 并发响应能力的关键配置值,表示每个进程允许的同时连接数。maxConnection=work_connections*worker_processes;一般一个浏览器会同时开两条连接,如果是反向代理,nginx到后服务器的连接数量也要占用2条连接数,所以,做静态服务器,一般maxConnection=work_connections*worker_processes/2;做反代理服务器时maxConnection=work_connections*worker_processes/4; use events useepoll; 根据不同的平台,选择高效的连接处理方法 指定处理连接请求的方法。linux内核2.6以上默认使用epoll方法,其它平台请参考:http://nginx.org/en/docs/events.html备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数 worker_cpu_affinity main worker_cpu_affinitycpumask…; 无 将工作进程绑定到特定的CPU上,减少CPU在进程之间切换的开销。用二进制bit位表示进程绑定在哪个CPU内核。如8内核4进程时的设置方法:worker_cpu_affinity00000001000000100000010010000000 worker_rlimit_nofile main worker_rlimit_coresize; 受linux内核文件描述符数量限制 设置nginx能打开的文件描述符数量。因为Linux对每个进程所能打开的文件描述数量是有限制的,默认一般是1024个,可通过ulimit-nFILECNT或/etc/securit/limits.conf配置修改linux默认能打开的文件句柄数限制。建议值为:系统数量/进程数。但进程间工作量并不是平均分配的,所以可以设置在大一些。推荐值为:655350 error_log main,http,mail,stream,server,location error_log日志文件路径日志级别; error_loglogs/error.logerror; 配置错误日志文件的路径和日志级别。日志级别有debug,info,notice,warn,error,crit,alert和emerg几种。nginx的日志使用syslog输出,所以输出的日志格式是有规律的,系统运维人员可以根据日志规则进行查错或统计分析。更多说明请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log pid main pid守护进程socket文件路径; pidlogs/nginx.pid 配置nginx守护进程ID存储文件路径(不是工作进程)
以上是nginx的顶层配置,管理服务器级别的行为。
nginx做为一个HTTP反向代理服务器,平时接触得最多的应该是针对http请求的相关配置了,和http模块有关的所有配置都放在http{...}配置中。
指令 上下文 语法 功能描述 types http,server,location types{mime类型文件后缀;}; 配置能处理的文件类型。如:text/htmlhtmlhtmshtml; include any include文件路径; 将外部文件的内容做为配置拷贝到nginx.conf文件中。如:includemime.type;将当前目录下的mime.type配置文件拷贝到nginx配置文件中。文件路径可以是相对路径或绝对路径。文件名可以用*来表示通配符。 default_type http,server,location default_typemime类型; 文件名到后缀的映射关系。配置默认的mime类型,当在types指令中找不到请求的文件类型时,就使用default_type指定的类型。默认为text/plain类型。 access_log http,server,location,ifinlocation,limit_except access_logpath[format[buffer=size][gzip[=level]][flush=time][if=condition]];#nginx不同于apache服务器,当进行了大量优化设置后会魔术般的明显性能提升效果 #nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多 #usernobody; #阻塞和非阻塞网络模型: #同步阻塞模型,一请求一进(线)程,当进(线)程增加到一定程度后 #更多CPU时间浪费到切换一,性能急剧下降,所以负载率不高 #Nginx基于事件的非阻塞多路复用(epoll或kquene)模型 #一个进程在短时间内可以响应大量的请求 #建议值<=cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响 worker_processes4; #将workprocess绑定到特定cpu上,避免进程在cpu间切换的开销 worker_cpu_affinity0001001001001000 #8内核4进程时的设置方法worker_cpu_affinity00000001000000100000010010000000 #每进程可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是) #文件描述符用完了,新的连接会被拒绝,产生502类错误 #linux可打开文件数可通过ulimit-nFILECNT或/etc/security/limits.conf配置 #理论值系统数量/进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些 worker_rlimit_nofile65535; #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; events{ #并发响应能力的关键配置值 #每个进程允许的同时连接数,work_connectins*worker_processes=maxConnection; #要注意maxConnections不等同于可响应的用户数量, #因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数 #所以,做静态服务器时,一般maxClient=work_connectins*worker_processes/2 #做反向代理服务器时maxClient=work_connectins*worker_processes/4 #这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可可打开文件,可用sockets数量(约64K)有关 worker_connections65535; #指明使用epoll或kquene(*BSD) useepoll; #备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数 } http{ includemime.types; default_typeapplication/octet-stream; #log_formatmain\'$remote_addr-$remote_user[$time_local]"$request"\' #\'$status$body_bytes_sent"$http_referer"\' #\'"$http_user_agent""$http_x_forwarded_for"\'; #关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用 access_logoff #只记录更为严重的错误日志,可减少IO压力 error_loglogs/error.logcrit; #access_loglogs/access.logmain; #启用内核复制模式,应该保持开启达到最快IO效率 sendfileon; #简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据 #这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性 #比较适合于文件下载这类的大数据包通信场景 #tcp_nopushon;在 #tcp_nodelayon|offon禁用Nagle算法 #keepalive_timeout0; #HTTP1.1支持持久连接alive #降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值 keepalive_timeout30s; #启动内容压缩,有效降低网络流量 gzipon; #过短的内容压缩效果不佳,压缩过程还会浪费系统资源 gzip_min_length1000; #可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高 gzip_comp_level4; #压缩的内容类别 gzip_typestext/plaintext/cssapplication/jsonapplication/x-javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript; #静态文件缓存 #缓存数量,文件未使用存活期 open_file_cachemax=65535inactive=20s; #验证缓存有效期时间间隔 open_file_cache_valid30s; #有效期内文件最少使用次数 open_file_cache_min_uses2; server{ listen80; server_namelocalhost; charsetutf-8; #access_loglogs/host.access.logmain; location/{ roothtml; indexindex.htmlindex.htm; } #error_page404/404.html; #redirectservererrorpagestothestaticpage/50x.html # error_page500502503504/50x.html; location=/50x.html{ roothtml; } ... } ... }