nginx自学之路

一. 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表大小。

     

}

相关文章
相关标签/搜索