[NGINX] - 配置文件优化 - NGINX.CONF
标签(空格分隔): Nginx
本文主要针对公司的Nginx负载均衡配置进行解释,配置文件在最下方。因为公司没有使用PHP,所以NGINX里面并没有太多facgi模块相关优化
NGINX.CONF
user
语法: user user[group];
标签: main
定义user和工作group 进程使用的凭证。如果group省略,user则使用名称等于的组。
worker_processes
句法: worker_processes number | auto;
默认: worker_processes 1;
标签: main
---------------------
例如,
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
将工作进程绑定到CPU集合。每个CPU集合由允许的CPU的位掩码表示。应该为每个工作进程定义一个单独的集合。默认情况下,工作进程不绑定到任何特定的CPU。
绑定每个工作进程到一个单独的CPU
worker_processes 2;
worker_cpu_affinity 0101 1010;
error_log
语法:error_log file [level];
默认:error_log logs / error.log错误;
可用标签:main,http,mail,stream,server,location
配置日志记录。可以在同一级别上指定多个日志(1.5.2)。如果在main配置级别上,未明确定义将日志写入文件,将使用默认文件。
第一个参数定义file将存储日志。特殊值stderr选择标准错误文件。可以通过指定“ ”前缀来配置日志记录到syslogsyslog:。 可以通过指定“ ”前缀和缓冲区来配置对循环内存缓冲区的日志记录 ,并且通常用于调试(1.7.11)。 memory:size
第二个参数决定了level日志记录,并且可以是下列之一: debug,info,notice, warn,error,crit, alert,或emerg。以上的日志级别按严重性递增的顺序列出。设置特定日志级别将导致记录指定日志级别和更严重日志级别的所有消息。例如,默认级别error会导致error,crit, alert,和emerg被记录的消息。如果省略此参数,则error使用。
worker_connections
句法: worker_connections number;
默认: worker_connections 512;
标签: events
设置工作进程可以打开的最大并发连接数
应该记住,这个数字包括所有连接(例如,与代理服务器的连接等等),而不仅仅是与客户端的连接。另一个考虑是同时连接的实际数量不能超过打开文件的最大数量的当前限制,可以通过worker_rlimit_nofile更改
include
句法: include file | mask;
标签: any
包括另一个file,或匹配指定的文件mask,到配置。包含的文件应包含语法正确的指令和块。
用法实例:
include mime.types;
include vhosts/*.conf;
default_type
语法:default_type application/octet-stream;
标签:http
default_type:属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置php环境时,nginx是不予解析的。此时,用浏览器访问php文件就会出现下载窗口。
log_format
常用语法:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
标签:http
解释: nginx的HttpLog模块指令,用于指定Nginx日志输出格式,acc为此日志输出格式的名称,可以在access_log指令中引用。
在HTTP协议中,有一个表头字段叫referer,使用URL格式来表示哪里的链接用了当前网页的资源。通过referer可以检测目标访问的来源网页,如果是资源文件,可以跟踪到显示它的网页地址,一旦检测出来不是本站,马上进行阻止或返回指定的页面。
HTTP Referer是header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理,Apache、Nginx、Lighttpd三者都支持根据http referer实现防盗链referer是目前网站图片、附件、html最常用的盗链手段。
access_log
语法:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
默认: access_log logs/access.log combined;
标签: http, server, location, if in location, limit_except
该ngx_http_log_module模块中指定的格式写入请求日志。
缓冲区大小不能超过对磁盘文件的原子写入大小。对于FreeBSD,这个大小是无限的。
启用缓冲时,数据将写入文件:
如果下一个日志行不适合缓冲区;
如果缓冲的数据比flush 参数(1.3.10,1.2.7)指定的旧;
当工作进程重新打开日志文件或正在关闭时。
access_log /path/to/log.gz combined gzip flush = 5m;
要使gzip压缩工作,nginx必须使用zlib库构建。
示例配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile
语法:sendfile on|off
默认:sendfile off
标签:http,server,location,if in location
sendfile参数用于开启文件的高效传输模式,同时将tcp_nopush和tcp_nodelay两个指定设为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率。
参数作用:激活或者禁用sendfile()功能。sendfile()是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核之中,被称为“零拷贝”,sendfile()和read和write函数要高效很多,因为read和wrtie函数要把数据拷贝到应用层再进行操作。相关控制参数还有sendfile_max_chunk。
tcp_nopush
语法: tcp_nopush on | off;
默认: tcp_nopush off;
标签:http, server, location
参数作用:激活或禁用Linux上的TCP_CORK socker选项,此选项仅仅开启sendfile时才生效,激活这个tcp_nopush参数可以运行把http response header和文件的开始放在一个文件里发布,减少网络报文段的数量。
tcp_nodelay
语法:tcp_nodelay on | off;
默认:tcp_nodelay on;
标签:http, server, location
参数作用:用于激活tcp_nodelay功能,提高I/O性能
默认情况下数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能,但是,在每次只发送很少字节的业务场景,使用tcp_nodelay功能,等待时间会比较长。
参数生产条件:激活或禁用tcp_nodelay选项,当一个连接进入到keep-alive状态时生效
keepalive_timeout
语法:keepalive_timeout timeout [header_timeout];
默认:keepalive_timeout 75s;
标签:http, server, location
参数作用:nginx长链接 keep-alive可以使客户端到服务端已经建立的连接一直工作不退出,当服务器有持续请求时,keep-alive会使用正在建立的连接提供服务,从而避免服务器重新建立新连接处理请求。
keepalive_requests
keepalive_requests 8192; --每个连接最大请求数
标签:http, server, location
client_max_body_size
语法:client_max_body_size size;
默认:client_max_body_size 1m;
标签:http, server, location
参数作用:设置最大的允许客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会收到413错误,意思是请求的条目过大,有可能浏览器不能正确的显示这个错误,设置为0表示禁止检查客户端请求主体大小,此参数对服务端的安全有一定的作用。