一. nginx配置文件介绍:javascript
user nginx;#运行nginx的用户css
worker_processes 4;#启动几个worker进程,ps -aux |grep nginx可查看。注:通常和CPU逻辑线程相同,使用grep -c processor /proc/cpuinfo命令查看。html
worker_cpu_affinity 0001 0010 0100 1000; #将4个worker进程分配在4个CPU核心上。java
worker_rlimit_nofile 65535; #一个worker进程最多打开的文件描述符的数量,应和ulimit -n命令:打开最多文件数量一致。node
worker_connections 1024; #单个worker进程处理的最大并发连接数。nginx最大并发连接总数=worker_processes 乘于 worker_connectionsnginx
error_log logs/error.logs warn; #debug info notice warn error crit 错误日志级别越高,记录的信息越少,配置等较高级别,会带来巨大磁盘I/O消耗。浏览器
pid /usr/local/nginx/logs/nginx.pid #pid进程文件存放目录。缓存
events {服务器
use epoll; #epoll网络IO多路复用模型没有对描述符的限制,相比select,poll来讲比较灵活。多路复用:一个线程内交替并发的处理主动询问的系统IO请求。网络
}
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:记录客户端的ip地址。 $remote_user:记录客户端用户名。 $itme_local:记录访问时间。 $request:记录请求的URL $http_x_forwarded_for:记录代理的IP地址。
# $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; #客户端会话连接超时时间,
client_header_timeout 10; #设置客户端请求头超时时间,nginx 若是超过这个时间没有发送数据将返回request time out错误。
client_body_timeout 10; #设置客户端请求主体超时时间,nginx 若是超过这个时间没有发送数据将返回request time out错误。
send_timeout 10; #设置nginx响应客户端超时时间,如发送数据给客户端,客户端迟迟不接受,超过这个时间将超时。
reset_timedout_connection on; #删除链接超时的客户端,释放内存空间。
#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标签。
gzip_disaple "MSIE [1-6]\."; #若是是IE就不给他压缩。
注:gzip通常不建议压缩图片,应为效果并非很明显并耗费CPU资源,图片还有可能显示的不正常。建议使用expires缓存设置。
#limit限制:
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s; #http中配置,单个ip发送过来的请求,nginx每秒只处理一个请求。 zone:起一个区块名字,申请占用10MB的内存空间。
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 5; #location中配置,限制单个IP最大并发链接数为5,超过最大链接数时返回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表大小。
}