nginx主配置文件详解及优化

简介:

一,优化方向

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;
}









本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/1198027,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
缓存 负载均衡 应用服务中间件
nginx的配置文件详解
本文详细解释了nginx配置文件中的关键指令和区块,如http、server、location、upstream、events等,并通过一个示例配置文件展示了如何设置HTTP服务器、gzip压缩、反向代理、URL重写、错误页面和负载均衡等,强调了配置的灵活性和实际应用。
47 4
|
1月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
160 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
1月前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
75 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
1月前
|
域名解析 网络协议 应用服务中间件
nginx server_name配置文件覆盖不生效
nginx server_name配置文件覆盖不生效
|
1月前
|
应用服务中间件 nginx
nginx 配置文件
nginx 配置文件
|
1月前
|
缓存 前端开发 JavaScript
|
5月前
|
缓存 负载均衡 应用服务中间件
深入解析Nginx配置文件
Nginx是一个高性能HTTP服务器和反向代理,其配置文件`nginx.conf`包含全局、事件、HTTP、Server和Location块。全局块设置如用户和工作进程数,事件块设定连接数,HTTP块涉及MIME类型、日志和包含其他配置。Server块定义虚拟主机,Location块处理URI匹配。Nginx常用于反向代理和负载均衡,如`proxy_pass`指令转发请求至后端服务器组。理解这些配置有助于服务器优化和测试。
|
1月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
122 0
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
61 2
|
3月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
161 1