一,优化方向
1)worker_processes 8;
nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
2)worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
3)worker_rlimit_nofile 102400;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
4)use epoll;
使用epoll的I/O模型
5)worker_connections 102400;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
6)keepalive_timeout 60;
keepalive超时时间。
7)client_header_buffer_size 32k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
8)open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后***缓存。
9)open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
10)open_file_cache_min_uses 1;
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
11)gzip_types
使用gzip对静态文件进行压缩,减少网络带宽,增加传输速率
二,配置文件详解:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#user www www;
#如果服务器是多cpu的话,可以用如下指令指定nginx工作进程的数量,官方配置一般为server的cpu个数(或cpu核心数)的2倍。它能够把工作负载平均分配到多个处理器上,也能减少进程在磁盘I/O阻塞上的延迟时间。
worker_processes 8;
pid logs
/nginx
.pid;
error_log logs
/error
.log;
#指定单个worker_process进程能够打开的文件描述符个数,如果并发的请求量过大,单个进程的打开的文件描述符数量大于这个数,就会向客户端返回502错误
worker_rlimit_nofile 10240;
#定义事件机制的指令,使用合适的事件处理机制,从而增加nginx的性能
events {
#linux的内核版本为2.6以上的,故使用epoll事件模型,它比select模型高效很多。主要表现在:
1,每个进程能够打开的fd的个数是没有限制的 2,由于网络延迟等原因,任一时间只有部分的socket是
"活跃"
的,而
select
/poll
每次调用都会线性扫描全部的集合(轮询方式),导致效率呈现线性下降。但是epoll不存在这个问题,它只会对
"活跃"
的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的,如果fd就绪就会通知进程,增加了效率。于是,只有
"活跃"
的socket才会主动去调用callback函数,其他idle状态的socket则不会。
use epoll;
#定义每个worker_process工作进程能够处理的连接数
worker_connections 10240;
}
http {
#mime.types文件中定义了web服务器常用的所有MIME类型,也可以通过修改此文件,来自定义类型。MIME TYPE的作用是告诉浏览器所请求的文件媒体类型。
include mime.types;
#此指令用于定义默认的MIME类型,当nginx无法识别文件属于何种MIME类型时,则告诉浏览器此文件类型为“二进制数据类型”
default_type application
/octet-stream
;
#定义log的格式,可以使用nginx的通用变量和一些只有在写日志时才存在的变量进行定义。根据需要需要定义log的格式,可以从log中获取有用的信息,便于我们分析一些故障和做一些统计工作等。
log_format main
'"$time_local","$remote_addr","$http_x_forwarded_for","$http_host","$request","$http_referer","$http_user_agent","$upstream_http_x_s_m","$cookiesize","$http_x_sohupassport_userid","$status","$cookie__smuid","$request_time","$body_bytes_sent","$upstream_addr","$upstream_status","$upstream_response_time","$http_accept","$http_q_ua","m-nginx-94"'
;
log_format hz_main
'"[$time_local]","$remote_addr","$http_x_forwarded_for","$http_x_sohupassport_userid","$request","$request_length","$request_time","$body_bytes_sent","$status","$http_referer","$http_user_agent","$uid","$fr","$upstream_addr","$upstream_status","$upstream_response_time","m-nginx-94"'
;
##########如下三行的意思为: nginx首先调用tcp_cork,阻塞下层的数据发送,然后调用send_file发送数据,然后当前的请求结束,最终会调用tcp_close或者tcp_shutdown(设置linger_timeout)来关闭连接,而当关闭连接(我们的keepalived设置的为0)的同时,内核会将写buf中缓存的数据发送出去,这样,就不需要我们关闭tcp_cork,因为内核会帮我们做这个,于是减少了一次系统调用。
#启用sendfile()函数。sendfile()是作用于数据拷贝在两个文件描述符之间的操作函数.这个拷贝操作是内核中操作的,所以称为"零拷贝".sendfile函数比起read和write函数高效得多,因为read和write是要把数据拷贝到用户应用层操作.
sendfile on;
#该指令允许或者禁止使用FreeBSD的TCP_NOPUSH,或者是Linux的TCP_CORK套接字,这个仅在sendfile开启的时候才有用。
tcp_nopush on;
#默认情况下数据发送时,内核不会马上发送,会等待较多的字节组成一个数据包,这样能提供IO的发送效率,对于大量数据的传送石非常有益的。但是,如果每次只发送很少字节的程序中,等待时间就会长,由于我们的web服务器一次不会传输大量数据,故禁用内核这个等待功能,会提高nginx传送数据的效率。
tcp_nodelay on;
#设定客户端到服务器端连接的超时时间,对于提供静态内容的网站是非常有用的,但是连接保持不释放也非常消耗nginx服务器的资源。设置为0即表示不启用这个功能,动态网站一般禁用。
keepalive_timeout 0;
#开启gzip压缩功能,对用户请求的页面进行压缩处理,以达到节省网络带宽,提高网站速度的作用。
gzip
on;
#允许压缩的页面最小字节数。建议值为大于1024字节,小于1K的压缩可能无效果
gzip_min_length 1000;
#设置系统获取几个单位的缓存用于存储gzip压缩结果数据流。此设置为:按照原始数据大小以16K为单位的4倍大小申请内存空间。如果不设置的话,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩的结果。
gzip_buffers 4 16k;
#指定需要被压缩的文件媒体类型
gzip_types text/* text
/css
text
/vnd
.wap.wml application
/javascript
application
/x-javascript
application
/xml
application
/xhtml
application
/xhtml
+xml application
/wml
application
/action
;
#设置压缩比,值为1-9,压缩比最大,处理速度会越慢
gzip_comp_level 9;
#nginx做反向代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩
gzip_proxied any;
#识别http协议的版本,只有1.1版本的压缩,因为可能早期的浏览器或http客户端可能不支持gzip压缩
gzip_http_version 1.1;
#如果IE1-6的浏览器的gzip压缩,因为他们不支持
gzip_disable
"MSIE [1-6].(?!.*SV1)"
;
#gzip_vary的作用是在http响应中增加一行“Vary: Accept-Encoding”,目的是改变反向代理服务器的缓存策略,反向代理服务器会根据后端服务器是否带Vary头采用不同的缓存策略。
gzip_vary on;
#设置nginx获取几个单位的缓存空间,用于存放要向客户端发送的数据。此设置为:按照原始数据大小以32K为单位的4倍大小申请内存空间。
output_buffers 4 32k;
#当nginx向客户端发送的数据达到1460字节的时候,才向客户端发送数据,提高效率
postpone_output 1460;
#设定服务器名称(即server_name指令所设置)哈希表的框大小,值越大能设置的server_name可以越多。参数哈希框大小总是等于哈希表的大小,即处理器高速缓存区(32)的倍数,这将加速处理器中key的搜索速度,减少内存的存取数。
server_names_hash_bucket_size 128;
#用于设置客户端请求的Header头缓冲区的大小,一般1kb就够用
client_header_buffer_size 32k;
#设置nginx允许接收的客户端请求内容的最大值,及客户端请求Header头信息中设置的Content-Lenth大最大值。如果超出该指令设置的最大值,nginx将返回“Request Entity Too Large”的错误信息(HTTP的413错误码)
client_max_body_size 8m;
#设置客户端请求的Header头缓冲区大小,默认为4K。客户端请求行不能超过设置的第一个数,请求的Header头信息不能大于设置的第二个数,否则会报"Request URI too large"(414)或“Bad request”(400)错误。如果客户端的Cookie信息较大,则需增加缓冲区大小
large_client_header_buffers 4 256k;
#设置nginx读取客户端请求Header头信息的超时时间,如果超过该指令设置的时间,nginx将返回"Requet time out"错误信息(HTTP的408错误码)
client_header_timeout 1m;
#设定nginx读取客户端请求内容的超时时间,如果超过该指令设置的时间,nginx将返回"Request time out"错误信息(HTTP状态码408)
client_body_timeout 1m;
#设置发送给客户端的应答超时时间。指两次tcp握手,还没有转为established状态的时间。如果这个时间,客户端没有响应,Nginx则关闭连接
send_timeout 1m;
#该指令判断nginx是否会拦截HTTP状态码为400及以上的代码应答。on之后,nginx将会拦截error_page指令明确指定的错误状态码,如果来自被代理服务器的应答状态码不匹配一个error_page指令,应答将被正常发送。
proxy_intercept_errors on;
secret
/opt/apps/wcms2_0/conf/secret
.key;
#包含配置文件,并且支持文件名的匹配,例:"include extra/*.conf"
include extra
/upstreamA
.conf;
include extra
/upstreamOther
.conf;
include extra
/upstreamTest
.conf;
include extra
/m
.sohu.com.conf;
include extra
/ucweb
.m.sohu.com.conf;
include extra
/a
.m.sohu.com.conf;
include extra
/b
.m.sohu.com.conf;
include server-status.conf;
include extra
/uc
.m.sohu.com.conf;
include extra
/hz
.m.sohu.com.conf;
include extra
/2012
.m.sohu.com.conf;
}
|