1. C10k问题:无法同时并发超过(1w)客户端请求而出现的问题。
nginx默认配置超过1w并发;
2.配置文件conf/nginx.conf
(1)user www www;
#定义Nginx运行的用户和用户组
(2)worker_processes 8;
#启动进程,通常设置成和cpu数量相等;
(3)worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 100000000 ;
#为每个进程分配cpu,上例中将8个进程分配到8个cpu;可以将一个进程分配多个cpu;
#ab压测命令,可以进行并发测试;
(4)worker_rlimit_nofile 1024;
#最多打开文件描述符的数量;内核在同一时间可以打开的socket文件的数量。和最大并发数量相等。一个进程接收的最大请求数。
#文件描述符:内核利用文件描述符来访问文件;文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。
#Nginx进程能够处理的socket的数量,受限于服务端对进程fd(文件描述符)数量的限制。如果设置了unlumited(不限制),则会受限于操作系统内存,打开文件描述符需要消耗内存。
#读写文件也需要使用文件描述符来指定待读写的文件。
#ulimit -n 可以修改文件描述符数量
#查看进程打开文件描述符处理请求: cd /proc/进程号/fd
#proc:Linux服务器状态信息存放目录;
(5)error_log /usr/local/nginx/logs/error.log info;
#错误日志定义等级debug|ifo|notice|warn|error|crit;越往后等级越高,信息越少;越往前信息越多;
#关闭错误日志:error_log /dev/null;
#日志可以配置在全局段、http段、server段、location段。同一个段中只允许出现一个error_log;一般配置在server段,或http段;生产环境建议配置级别为warn;
(6)pid /usr/local/nginx/nginx.pid
#工作模式及连接数上限;
(7)use epoll;
#epoll是多路复用IO中的一种方式,可以提高nginx的性能。
#nginx服务器处理和响应web请求的过程,是基于事件驱动模型的;事件驱动处理库又被称为多路IO复用方法;最常见三种模型:select模型、poll模型、epoll模型;
#请求处理跟网络I/O模型相关,在计算机系统中I/O就是输入输出的意思;
#网络I/O是用户态和内核态之间的数据交换。
#用户发送请求给网卡eth0; -> 请求发送给10.0.0.8:80; -> 由端口应用进程通过系统调用(read)-> 由用户态转到内核态 ->内核将请求的数据转发到内核缓冲区
-> 应用进程查看内核缓冲区是否有数据 -> 如果有,则把数据拷贝到用户态 -> 完成I/O操作;
(8)worker_connection 10000;
#单个后台worker_process进程的最大并发连接数(最大连接数=连接数x进程数);也就是单个进程能够接收的请求数;
(9)multi_accept on;
#尽可能多的接受请求;默认开启;
-------------------------------------
(10)include mime.types;
#识别网站资源类型,推送调用浏览器默认功能;
default_type application/octet-stream;
#默认类型;
(11)access_log /usr/local/nginx/log/nginx/access.log;
#设定日志格式;
(12)charset UTF-8;
#设置标准字符集
(13)sendfile on;
#加速访问函数;开启会加速访问;会在cpu的缓存区生成函数调用,加速tcp socket的请求;
(14)autoindex on;
#开启目录列表访问,适合下载服务器,默认关闭;
(15)tcp_nopush on;
#防止网络阻塞。当应用程序产生数据时,内核不会立马封包,而是当数据累积到一定量时才会封装,然后传输。这样有助于解决网络阻塞问题。调用一个tcp_cork方法调用。
(16)keepalive_timeout 65;
#超时时间,客户端到服务器端的连接持续有效时间当出现对服务器的后续请求时,keepalive_timeout功能可以避免建立或重新建立连接。(节省服务器资源、cpu、内存、网卡)
(17)tcp_nodelay on;
#提高数据的实时响应性;
(18)开启gzip压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 128k;
gzip_http_version 1.1;
gzip_comp_level 4;
#压缩级别最大为9,级别越小压缩比例越小,cpu处理越快。级别越高,消耗cpu就越高。
gzip_types test/plain application/x-javascript text/css application/xml; #指定压缩文件类型;
gzip_proxied any; #压缩所有类型文件;
gzip_vary on;
(19)client_mas_body_size 10m;
#允许客户端请求的最大单文件字节数;
(20)client_body_buffer_size 128k;
#缓冲区 代理缓冲用户端 请求的 最大字节数;
(21)proxy_connect_timeout 300;
#nginx 跟后端服务器连接超时时间(代理连接超时);
(22)proxy_send_timeout 300;
#后端服务器数据回传时间,超过300秒未回传,返回502错误,服务器未反应请求
(23)proxy_read_timeout 300;
#连接成功后,后端服务器响应时间;
(24)proxy_buffer_size 4k;
#设置代理服务器保存用户头信息的缓冲区大小;
(25)proxy_buffers 4 32k;
#proxy——buffers缓冲区,网页平均在32k以下时这样设置:proxy_busy_buffers_size 64k;
(26)large_client_header_buffers 4 16k;
client_header_buffer_size 4k;
#客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过1k;
#不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getcof PAGESIZE取得。
(27)open_file_cache max=1G inactive=20s;
#为打开文件指定缓存,默认时没有启用的,max指定缓存数量,建议和打开文件数一致;inactive是指经过多长时间文件没有背请求后删除缓存;
(28)open_file_cache_valid 30s;
#这个是指多长时间检查一次缓存的有效信息;
(29)open_file_cache_min_uses 1;
#open_file_cache指令中的inactive参数时间内文件的最少是使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的;