介绍
Nginx是Apache 2之外的一种快速、轻量级的选择。然而,Nginx就像任何类型的服务器或软件一样,必须进行调优以帮助获得最佳性能。
本文所需资源
- 一个安装基本配置的 Debian 7系统
- 安装和配置了Nginx服务器,并且能够正常运行
- 了解基础的LInux操作知识
进程(Worker Processes) and 连接(Worker Connections)
我们需要调整的前两个变量是Worker Processes和Worker Connections。在开始进入设置之前,我们需要了解这些指令所控制的内容。worker_processes指令是Nginx 的基础。该指令负责使我们的虚拟服务器知道绑定到正确的IP和端口后会产生多少个workers。通常每个内核运行1个worker。超出此限制的任何内容都不会损害您的系统,但通常会留下闲置的进程。
要弄清楚将worker_processes设置为多少,只需查看一下设置中的核心数量即可。如果最终将尺寸快速调整为更大的设置,则需要再次检查内核并相应地调整此数字。我们可以通过输入cpuinfo来完成此操作:
grep processor /proc/cpuinfo | wc -l
假设这返回值1。这就是我们计算机上的内核数量!
该worker_connections命令告诉我们的工作进程Nginx可以同时为多少人提供服务。默认值为768。但是,考虑到每个浏览器通常每个服务器至少打开2个连接,因此这个数目可以减少一半。这就是为什么我们需要调整我们的员工关系以发挥其全部潜力。我们可以通过发出ulimit命令来检查核心的限制:
ulimit -n
在较小配置的计算机(512MB)上,该数字可能显示为1024,这是一个很好的起始数字。
让我们更新配置:
sudo nano /etc/nginx/nginx.conf
worker_processes 1; worker_connections 1024;
请记住,可以服务的客户端数量可以乘以核心数量。在这种情况下,我们可以每秒处理1024个客户端。但是,该keepalive_timeout指令甚至可以进一步缓解这种情况。
缓冲区(Buffers)
我们可以做的另一个非常重要的调整是缓冲区的大小。如果缓冲区大小太小,则Nginx将必须写入一个临时文件,导致磁盘不断读写。在做出任何决定之前,我们需要了解一些指令。
client_body_buffer_size:这处理客户端缓冲区的大小,即发送到Nginx的所有POST操作。POST操作通常是表单提交。
client_header_buffer_size:与上一个指令类似,只不过它处理客户端标头的大小。出于所有目的和目的,1K通常对于该指令来说是不错的大小。
client_max_body_size:客户要求的最大允许大小。如果超过最大大小,则Nginx将吐出413错误或Request Entity Too Large。
large_client_header_buffers:大型客户端标头的缓冲区的最大数量和大小。
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
Timeouts
Timeouts还可以大大提高性能。
client_body_timeout和client_header_timeout指令是负责的服务器将等待客户端体或客户端头请求之后被发送的时间。如果没有发送正文或标题,则服务器将发出408错误或“ 请求超时”。
该keepalive_timeout分配用于与客户端保持连接超时。简而言之,Nginx将在这段时间之后关闭与客户端的连接。
最后,send_timeout建立不是建立在整个应答的传输上,而是建立在两次读操作之间;如果在这段时间之后客户端什么都不做,则Nginx正在关闭连接。
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
Gzip压缩(Gzip Compression)
Gzip可以帮助减少Nginx处理的网络传输量。但是,请小心增加该值,gzip_comp_level因为服务器将开始浪费CPU周期。
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
静态文件缓存(Static File Caching)
可以为未更改且定期提供的文件设置过期标题。可以将该指令添加到实际的Nginx服务器块中。
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }
在上面的数组中添加和删除任何文件类型,以匹配您的Nginx服务器的文件类型。
日志(Logging)
Nginx将命中VPS的每个请求记录到日志文件中。如果使用分析来监视此功能,则可能需要关闭此功能。只需编辑access_log指令:
access_log off;
保存并关闭文件,然后运行:
sudo service nginx restart
结论
归根结底,一台配置正确的服务器就是要进行监视和相应调整的服务器。上面的变量没有一成不变的,需要针对每种情况进行调整。您可能希望通过负载平衡和水平缩放的研究来提高机器性能。这些只是众多优化手段中的几个。
译自:digitalocean
如果发现任何不正确的地方,或者想分享有关上述主题的更多信息,欢迎反馈。