大部分Nginx安装指南都告诉你以下几个基础知识:——是通过apt-get安装的,这里或者那里的几行配置都是修改过的。嗯,你已经有一个网络服务器了!此外,在大多数情况下,定期安装的nginx会很好地为您的网站工作。但是,如果真的想挤掉nginx的性能,就必须更深入。在本指南中,我将解释在处理大量客户端时,Nginx的哪些设置可以进行微调以优化性能。需要注意的是,这并不是一个全面的微调指南。这是一个简单的预览——概述那些设置可以微调,以提高性能。你的情况可能不一样。
基本(优化)配置
我们唯一会修改的文件是Nginx.conf,它包含了Nginx不同模块的所有设置。您应该能够在服务器的/etc/nginx目录中找到nginx.conf。先说一些全局的设置,再讲在大量客户端访问的时候,哪些设置可以让你有很好的性能,为什么会提升性能。本文末尾有一个完整的配置文件。
高级配置
在Nginx.conf文件中,在模块部分上面有一些Nginx中的高级配置。
用户www-data;
PID/var/run/nginx . PID;
worker_processes自动;
worker _ rlimit _ nofile 100000
User和pid应该默认设置——我们不会更改这些内容,因为它们更改与否没有任何区别。
Worker_processes定义了nginx对外提供web服务时Worker进程的数量。最佳值取决于许多因素,包括(但不限于)CPU内核数量、存储数据的硬盘数量和负载模式。当有疑问时,将它设置为可用CPU核心的数量将是一个好的开始(将其设置为“auto”将尝试自动检测它)。
Worker_rlimit_nofile更改工作进程的最大打开文件数。如果没有设置,这个值就是操作系统的限制。设置后,你的操作系统和nginx可以处理的文件比“ulimit -a”多,所以把这个值设置的高一些,这样Nginx就不会出现“打开文件太多”的问题。
事件模块
events模块包含了nginx中处理连接的所有设置。
事件{
工人_连接2048;
multi _ accept on
使用epoll
}
Worker_connections设置一个工作进程可以同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以把这个值设置得很高。
请记住,客户机的最大数量也受到系统中可用套接字连接数量的限制(大约64K),因此将其设置得过高是没有好处的。
Multi_accept告诉nginx在收到新的连接通知后接受尽可能多的连接。
Use设置多路复用客户端线程的轮询方法。如果使用Linux 2.6,应该使用epoll。如果使用*BSD,应该使用kqueue。想了解更多关于事件轮询的信息吗?看一下维基百科(注意你可能需要neckbeard和操作系统的课程基础才能知道一切)。
值得注意的是,如果你不知道Nginx应该使用哪种轮询方式,它会选择最适合你的操作系统的方式。
HTTP模块
HTTP模块控制了nginx http处理的所有核心特性。因为这里的配置比较少,所以我们只摘录一小部分配置。这些设置应该都在http模块里,甚至你都不会特别注意这个设置。
http {
server_tokens关闭;
在上发送文件;
tcp _ nopush on
tcp_nodelay打开;
}
Server_tokens不会让nginx运行得更快,但是可以在错误页面关闭nginx版本号,这样对安全性有好处。
Sendfile可以让sendfile()工作。Sendfile()可以在磁盘和TCP socket之间复制数据(或者任意两个文件描述符)。预发送文件是在传输数据之前在用户空间申请数据缓冲。然后使用read()将数据从文件复制到这个缓冲区,使用write()将缓冲区数据写入网络。Sendfile()立即将数据从磁盘读取到操作系统缓存。因为这种复制是在内核中完成的,所以sendfile()比结合read()和write()并打开和关闭丢弃缓冲区更有效(更多关于sendfile)。
Tcp_nopush告诉nginx在一个包中发送所有头文件,而不是一个一个地发送。
Tcp_nodelay告诉nginx不要缓存数据,而是一条一条的发送——当数据需要及时发送的时候,你要为应用设置这个属性,这样在发送一小段数据信息的时候,就不能马上得到返回值。
access _ log off
error _ log/var/log/nginx/error . log crit;
Access_log设置nginx是否存储访问日志。关闭此选项可以使读取磁盘IO更快(又名YOLO)。
Error_log告诉nginx只能记录严重的错误。
keepalive _ timeout 10
client _ header _ timeout 10
client _ body _ timeout 10
reset _ timedout _ connection on
send _ timeout 10
Keepalive_timeout将保持活动链路超时分配给客户端。超时后,服务器将关闭链接。我们可以把它调得低一些,让它工作更长时间。
Client_header_timeout和client_body_timeout分别设置请求头和请求体的超时时间。我们也可以把这个设置得更低。
Reset_timeout_connection告诉nginx关闭没有响应的客户端连接。这将释放该客户端占用的内存空间。
Send_timeout指定客户端的响应超时。该设置不会用于整个转发器,而是在客户端读取操作之间使用。如果客户机在这段时间内没有读取任何数据,nginx将关闭连接。
limit _ conn _ zone $ binary _ remote _ addr zone=addr:5m;
limit _ conn addr 100
Limit_conn设置给定键的最大连接数。这里的key是addr,我们设置的值是100,这意味着我们允许每个IP地址同时打开多达100个连接。
Limit_conn_zone设置用于保存各种键的共享内存的参数(比如当前连接数)。5m是5兆字节,这个值应该设置得足够大,以存储(32k 5)32字节状态或(16k 5)64字节状态。
包含/etc/nginx/mime . types;
default _ type text/html;
字符集UTF-8;
Include只是一个在当前文件中包含另一个文件内容的指令。这里我们用它来加载一系列稍后会用到的MIME类型。
Default_type设置文件使用的默认MIME类型。
Charset在头文件中设置默认的字符集。
以下两点解释了大站长StackExchange中的性能提升。
gzip _ disable“msie 6”;
# gzip _ static ongzip _ proxied anygzip _ min _ length 1000gzip _ comp _ level 4;
gzip_types文本/纯文本/css应用/json应用/x-javascript文本/xml应用/xml应用/xml rss文本/JavaScript;
Gzip告诉nginx以gzip压缩的形式发送数据。这将减少我们发送的数据量。
Gzip_disable禁用指定客户端的Gzip功能。我们将其设置为IE6或更低,以使我们的方案广泛兼容。
Gzip_static告诉nginx在压缩资源之前,先找出是否有已经被Gzip提前处理过的资源。这需要你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高的压缩比,所以nginx不必压缩这些文件(关于gzip_static的更详细的信息,请点击这里)。
Gzip_proxied允许或禁止基于请求和响应的响应流压缩。我们将其设置为any,这意味着所有请求都将被压缩。
Gzip_min_length设置启用数据压缩的最小字节数。如果一个请求小于1000字节,我们最好不要压缩,因为压缩这些小数据会让所有处理这个请求的进程变慢。
gzip_comp_level设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
gzip_type设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。
#缓存关于文件描述符、频繁访问的文件的信息#可以提高性能,但您需要测试这些值open _ file _ cache max=100000 inactive=20s;open _ file _ cache _ valid 30s open _ file _ cache _ min _ uses 2;打开文件缓存错误;###虚拟主机配置#又名我们对特定服务器的设置##包括/etc/nginx/conf.d/.confinclude/etc/nginx/sites-enabled/;
打开文件缓存打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
打开文件缓存有效在打开文件缓存中指定检测正确信息的间隔时间。
打开文件缓存最小使用次数定义了打开文件缓存中指令参数不活动时间期间里最小的文件数。
打开文件缓存错误指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。
一个完整的配置
用户www-data;PID/var/run/nginx。PID工作进程自动;worker _ rlimit _ nofile 100000
事件{ worker _ connections 2048 multi _ accept on使用epoll}
http {服务器令牌关闭在上发送文件;tcp _ nopush ontcp_nodelay打开;
access _ log offer error _ log/var/log/nginx/error。日志暴击;
keepalive _ time out 10 client _ header _ time out 10 client _ body _ time out 10 reset _ time out _ connection on send _ time out 10
limit _ conn _ zone $ binary _ remote _ addr zone=addr:5m;极限_连接器地址100
包含/etc/nginx/mime。类型;default _ type text/html;字符集UTF-8;
gzip打开;gzip _ disable“msie 6”;gzip _ proxied any gzip _ min _ length 1000 gzip _ comp _ level 6;gzip_types文本/纯文本/css应用/json应用/x-javascript文本/xml应用/xml应用/xml rss文本/JavaScript;
open _ file _ cache max=100000 inactive=20s;open _ file _ cache _ valid 30s open _ file _ cache _ min _ uses 2;打开文件缓存错误;
包括/etc/nginx/conf.d/.confinclude/etc/nginx/sites-enabled/;}
编辑完配置后,确认重启nginx使设置生效。
须藤服务nginx重新启动
后记
就这样!你的网服务器现在已经就绪,之前困扰你的众多访问者的问题来吧。这并不是加速网站的唯一途径,很快我会写更多介绍其他加速网站方法的文章的。
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn