常用配置项在工作中,我们与Nginx打交道更多的是通过它的配置文件。那么就要掌握这些配置项各自的作用。首先,nginx.conf的内容通常是这样的:......#coretouchblockevents{#eventmodule...}http{#httpmoduleserver{#serverblocklocation[PATTERN]{#位置块。..}location[PATTERN]{...}}server{...}}mail{#mailmoduleserver{#serverblock...}}下面依次看一下各个模块的通用配置项:核心模块用户管理员;#配置用户或组。worker_processes4;#允许生成的进程数,默认为1pid/nginx/pid/nginx.pid;#指定nginx进程运行文件error_loglog/error.logdebug的存放地址;#错误日志路径,级别。事件模块事件{accept_mutexon;#设置网络连接的序列化,防止惊群的发生,默认是onmulti_accepton;#设置一个进程是否同时接受多个网络连接,默认是offuseepoll;#事件驱动模型select|poll|kqueue|epoll|resigworker_connections1024;#最大连接数,默认512}httpmodulehttp{includemime.types;#文件扩展名和文件类型映射表default_typeapplication/octet-stream;#默认文件类型,默认为text/plainaccess_logoff;#取消服务日志sendfileon;#允许sendfile传输文件,默认关闭,可以在http块,server块,location块。发送文件最大块100k;#每次进程调用的传输次数不能大于设置值,默认为0,即没有上限。keepalive_timeout65;#连接超时,默认75s,可以在http、server、location块中。服务器{keepalive_requests120;#最大单次连接请求数。听80;#监听端口server_name127.0.0.1;#收听地址索引index.htmlindex.htmindex.php;扎根你的路径;#根目录位置~\.php${fastcgi_passunix:/var/run/php/php7.1-fpm.sock;#fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;包括fastcgi_params;}}}配置项解析worker_processesworker_processes用于设置Nginx服务的进程数。此值是建议的CPU内核数。worker_cpu_affinityworker_cpu_affinity用于为每个进程分配CPU的工作核心。该参数有多个二进制值,每组代表一个进程,每组中的每一位代表该进程的CPU使用率,1表示使用,0表示不使用。所以我们使用worker_cpu_affinity0001001001001000;将进程绑定到不同的核心。默认情况下,工作进程不绑定到任何一个CPU。worker_rlimit_nofile设置每个进程打开文件的最大数量。如果不设置,上限为系统的ulimit-n个数,一般为65535。worker_connections设置一个进程允许的最大连接数。理论上是越大越好,但是不能超过worker_rlimit_nofile的值。useepoll设置事件驱动模型使用epoll。epoll是Nginx支持的高性能事件驱动库之一。是公认的非常好的事件驱动模型。accept_mutexoff关闭网络连接的序列化。设置为on时,会对多个Nginx进程接受的连接进行序列化,防止多个进程竞争连接。当服务器连接数较少时,启用该参数会在一定程度上降低负载。但当服务器吞吐量较高时,为了效率请关闭该参数;而当这个参数关闭时,请求在多个worker之间的分配可以更加均衡。所以我们关闭accept_mutex;multi_accepton设置一个进程同时接受多个网络连接。SendfileonSendfile是Linux2.0之后引入的系统调用,可以简化网络传输过程中的步骤,提高服务器性能。没有sendfile的传统网络传输过程:硬盘>>内核缓冲区>>用户缓冲区>>内核socket缓冲区>>协议栈使用sendfile()进行网络传输过程:硬盘>>内核缓冲区(快速复制到kernelsocket缓冲区)>>协议栈tcp_nopushon;设置数据包累加起来一起传输,可以提高一些传输效率。tcp_nopush必须与sendfile一起使用。tcp_nodelayon;小数据包不等待直接传输。默认是打开的。好像是tcp_nopush相反的功能,但是当双方都开启的时候,nginx也可以平衡这两个功能的使用。keepalive_timeoutHTTP连接的持续时间。设置太长会导致无用线程过多。这是根据服务器访问次数、处理速度、网络情况综合考虑的。send_timeout设置Nginx服务器响应客户端的超时时间。该超时时间仅适用于两个客户端与服务器建立连接后某些活动之间的时间。如果此时间后客户端没有任何活动,Nginx服务器将关闭连接gzipon启用gzip对响应数据进行在线实时压缩以减少数据传输量。gzip_disable"msie6"Nginx服务器在响应这类客户端请求时不使用Gzip功能缓存应用数据,gzip_disable"msie6"不对IE6浏览器数据进行GZIP压缩。常用的配置项大致就是这些。针对不同的业务场景,有些需要额外的配置项,这里不再展开。其他http配置中有一个location项,用于根据请求中的uri匹配相应的处理规则。location搜索规则location=/{#精确匹配/,主机名后面不能有任何字符串[configA]}location/{#因为所有地址都是以/开头,所以这条规则会匹配所有请求#但是正则和最长的字符串会先匹配[configB]}location/documents/{#匹配任意以/documents/开头的地址,匹配到后继续往下查找#只有后面的正则表达式不匹配时,这个才会用这个one[configC]}location~/documents/Abc{#匹配任意以/documents/Abc开头的地址,匹配到后继续往下查找#只有后面的正则表达式没有匹配到时,这一条将会被使用。[configCC]}location^~/images/{#匹配任何以/images/开头的地址。满足匹配后,停止搜索正则表达式,使用这个。[configD]}location~*\.(gif|jpg|jpeg)${#匹配所有以gif、jpg或jpeg结尾的请求#但是,所有在/images/下的图片请求都会被configD处理,因为^~达不到这条规则[configE]}location/images/{#字符匹配/images/,继续往下,会发现^~存在[configF]}location/images/abc{#最长的字符匹配/images/abc,继续往下,你会发现^~存在#F和G放置顺序无关[configG]}location~/images/abc/{#只有去掉configD才有效:最长匹配优先为地址从configG开始,继续往下查找,如果匹配到这条正则,则使用[configH]}正则搜索优先级从高到低如下:“=”开头表示完全匹配,例如在A中,只匹配根目录的末尾请求后面不能跟任何字符串。“^~”开头表示uri以正则字符串开头,不是正则匹配。“~”开头表示区分大小写的正则匹配;“~*”开头表示不区分大小写的正则匹配。“/”为一般匹配,如果没有其他匹配,则任何请求都会匹配到负载均衡配置Nginx负载均衡需要使用upstream模块,可以通过如下配置实现:upstreamtest-upstream{ip_hash;#使用ip_hash算法分配服务器192.168.1.1;#待分配ipserver192.168.1.2;}server{location/{proxy_passhttp://test-upstream;}}上面的例子定义了一个test-upstream负载均衡配置,通过proxy_pass反向代理命令Allocation处理将请求转发给模块。更多好文,关注公众号获取
