如何优化Nginx配置

来自菜鸟教程
跳转至:导航、​搜索

介绍

Nginx

Nginx 是有时霸道的 Apache 2 的快速轻量级替代方案。 但是,Nginx 就像任何类型的服务器或软件一样,必须进行调整以帮助获得最佳性能。

要求

工作进程和工作连接

我们需要调整的前两个变量是工作进程和工作连接。 在我们进入每个设置之前,我们需要了解这些指令中的每一个控制什么。 worker_processes 指令是 Nginx 生命的支柱。 该指令负责让我们的虚拟服务器知道在绑定到正确的 IP 和端口后要生成多少工作人员。 每个核心运行 1 个工作进程是常见的做法。 高于此值的任何内容都不会损害您的系统,但它会使空闲进程通常闲置。

要确定需要将 worker_processes 设置为多少,只需查看设置中的核心数量即可。 如果您使用的是 DigitalOcean 512MB 设置,那么它可能是一个核心。 如果你最终快速调整到更大的设置,那么你需要再次检查你的核心并相应地调整这个数字。 我们可以通过 grep 出 cpuinfo 来完成此操作:

grep processor /proc/cpuinfo | wc -l

假设这返回值 1。 那就是我们机器上的核心数量!

worker_connections 命令告诉我们的工作进程 Nginx 可以同时为多少人提供服务。 默认值为 768; 但是,考虑到每个浏览器通常会打开至少 2 个连接/服务器,这个数字可以减半。 这就是为什么我们需要调整我们的工人连接以充分发挥其潜力。 我们可以通过发出 ulimit 命令来检查内核的限制:

ulimit -n

在较小的机器(512MB droplet)上,这个数字可能会读取 1024,这是一个很好的起始数字。

让我们更新我们的配置:

sudo nano /etc/nginx/nginx.conf

worker_processes 1;
worker_connections 1024;

请记住,可以服务的客户端数量可以乘以核心数量。 在这种情况下,我们可以服务 1024 个客户端/秒。 然而,keepalive_timeout 指令甚至可以进一步缓解这种情况。

缓冲器

我们可以进行的另一个非常重要的调整是缓冲区大小。 如果缓冲区太小,那么 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;

超时

超时也可以显着提高性能。

client_body_timeoutclient_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 可以帮助减少 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;

静态文件缓存

可以为不更改且定期提供的文件设置过期标头。 该指令可以添加到实际的 Nginx 服务器块中。

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}

添加和删除上述数组中的任何文件类型,以匹配 Nginx 服务器的文件类型。

日志记录

Nginx 将命中 VPS 的每个请求记录到日志文件中。 如果您使用分析来监控这一点,您可能需要关闭此功能。 只需编辑 access_log 指令:

access_log off;

保存并关闭文件,然后运行:

sudo service nginx restart

结论

归根结底,正确配置的服务器是受到监控和相应调整的服务器。 上述变量都不是一成不变的,需要根据每个独特的情况进行调整。 更进一步,您可能希望通过负载平衡和水平扩展的研究来提高您的机器性能。 这些只是优秀的系统管理员可以对服务器进行的众多改进中的一小部分。

提交人: [[“%3Ca|https]] ://twitter.com/alexkavon [[“%3C/a|”>亚历克斯·卡文]]