一. nginx配置文件介绍:
user nginx;#运行nginx的用户
worker_processes 4;#启动几个worker进程,ps -aux |grep nginx可查看。注:一般和cpu核心数相同,使用grep -c processor /proc/cpuinfo命令查看。
worker_cpu_affinity 0001 0010 0100 1000; #将4个worker进程分配在4个CPU核心上,充分亲和CPU。
worker_rlimit_nofile 65535; #一个nginx进程最多打开的文件描述符的数量,应和ulimit -n命令:打开最多文件数量一致。
error_log logs/error.logs warn; #生产环境常用warn|error|crit错误日志级别越高,记录的信息越少,配置等较低级别,会带来巨大磁盘I/O消耗。
pid /usr/local/nginx/logs/nginx.pid #pid进程文件存放目录。
events {
use epoll; #epoll网络IO多路复用模型没有对描述符的限制,相比select,poll来说比较灵活。多路复用:一个线程内交替并发的处理主动询问的系统IO请求。
accept_mutex on; #防止惊群现象,默认为on。惊群现象:一个网路连接到来,多个睡眠的进程被叫醒,但只有一个进程能获得链接,这样会影响系统性能。
multi_accept on; #设置是否允许一个进程处理多个网络链接,默认off。
worker_connections 1024; #单个worker进程处理的最大并发链接数。nginx最大并发链接总数=worker_processes 乘于 worker_connections。
}
http {
include mime_types; #文件默认在conf目录下,根据文件类型来判断如何处理传输给浏览器的文件是打开还是下载。如果没有相对应的扩展名则默认交给default_type处理。
default_type application/octet-stream; #浏览器访问到未定义的扩展名时,就默认为下载该文件。设置改成default_type text/html;告诉浏览器把所有未设置的扩展名当HTML文件打开。
log_format zclwudi '$remote_add - $remote_user [$itme_local] "request" ' 注:zclwudi为日志格式调用名。
'$status $body_bytes_sent "$http_referer" "$request_time" '
' "$http_user_agent" "$http_x_forwarded_for" "$request_time" "$content_type" '
' "$request_body" ';
#nginx日志变量介绍:
#$remote_add和$http_x_forwarded_for:记录客户端的ip地址。 $remote_user:记录客户端用户名。 $itme_local:记录访问时间。 $request:记录请求的URL
# $status:记录nginx返回给客户端的状态码。 $http_referer:记录是从哪个网页链接访问过来的。 $request_time:请求处理时间。 $http_user_agent:记录客户端浏览器的信息。
#body_bytes_sent:发送给客户端的主体字节数。
server_tokens off; #隐藏版本号
sendfile on; #开启高效文件传输模式,nginx调用sendfile函数来传输文件。注:若图片显示不正常时改为off。
tcp_nopush on; # 开启sendfile模式时才生效,防止网络阻塞,减少了网络报文段的数量,将响应头和正文合在一个报文段发送。而不是一个一个发送。
tcp_nodelay on; #开启sendfile模式时才生效,防止网络阻塞告诉nginx不要缓存数据。
keepalive_timeout 30; #客户端链接超时时间,
#gzip压缩文件:
gzip on; #开启gzip压缩功能。
gzip_buffers 32 4k; #在内存中存储压缩文件32块每块4k。最后一块一块的传输给浏览器。
gzip_comp_level 6; #压缩级别分为为0-9,级别越高压缩功能越强,同时也会消耗cpu的资源。建议折中6级别。
gzip_min_length 200k; #小于200k的文件不压缩,太小的文件压缩没有意义啊,反而还耗费CPU的资源。
gzip_types text/css text/xml application/javascript; #压缩哪些类型的文件。默认就压缩text/html所以不用写,可以在mime.types文件中查看所有的压缩文件。
gzip_vary on; #告诉浏览器我的文件是压缩过的。nginx在header头部中加入VARY标签。
#limit限制:
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s; #http中配置,单个ip发送过来的请求,nginx每秒只处理一个请求。 zone:起一个区块名字,占用10m空间大小。
limit_req zone=test burst=5 nodelay; #location中配置,burst:表示可缓冲5个请求,第一次最多1秒处理6个请求,nodelay:表示立即处理缓冲中的请求,如果不设置则burst不生效。
limit_conn_zone $binary_remote_addr zone=addr:10m; #http中配置,$binary_remote_addr是$remote_addr的二进制格式,固定占用4个字节,而$remote_addr按照字符串存储,占用7-15个字节。
limit_conn addr 50; #location中配置,限制同一时间内允许50个并发连接数,超出的连接返回503。
limit_rate_after 3m;#http中配置,限速模块,前3M下载时不限速
limit_rate 512k; #http中配置,限速为每秒512KB。注:这里是对每个连接限速,而不是对ip限速,如果一个ip有两个并发链接,那么这个ip就限速为limit_rate * 2。
server_names_hash_bucket_size 128; #设置存储服务器名字的hash表大小。
}