Nginx 性能调优

Nginx 是一个免费的开源高性能轻量级 Web 服务器,用作负载均衡器、反向代理、HTTP 缓存和邮件代理。 尽管 Nginx 与其他 Web 服务器相比相当新,但由于其高性能,它的受欢迎程度正在上升。 使用默认的 Nginx 配置,您可能会获得快速的性能,但我们可以通过更改一些配置来最大限度地提高 Nginx 的性能。

在本文中,您将了解 8 种不同的最佳方法来提升 Nginx 以获得更好的性能。 为了证明 example 在本文中,我在 Ubuntu 20.04 LTS 系统上安装了 Nginx。

修改工作进程

Nginx 中的所有 Web 服务器请求都由工作进程处理。 在 Nginx 中,工作进程被架构为多个工作进程来处理请求,一个主进程负责管理所有工作进程以及分析配置。 在 Nginx 的默认配置中,worker process 参数设置为 auto,它根据可用的 CPU 内核生成工作进程。 正如 Nginx 官方文档所推荐的那样,这是根据可用 CPU 内核保持工作进程的最佳方式,因此建议使用 auto 参数。 如果您对处理器有多少个内核感到好奇,只需运行以下命令即可。

$ grep processor /proc/cpuinfo | wc -l

您可以从位于的 Nginx 配置文件中更改工作进程的默认值 /etc/nginx/nginx.conf。 如果您的服务器遇到更高的流量并且您需要添加更多工作进程,最好将服务器升级到更多核心处理器。

增强工作人员连接限制

工作连接数是每个可用工作进程可以管理的同时连接总数。 默认情况下,工作进程一次可以管理 512 个连接。 在修改工作连接值之前,您必须检查最大连接系统以允许使用以下命令根据它更新连接配置。

$ ulimit -n

极限

为了充分发挥 Nginx 的潜力,在 nginx.conf 文件中将工作连接值设置为系统允许的最大连接系统。

配置工作连接

实现内容压缩

对于 Web 内容压缩,Nginx 使用 gzip 来增加内容交付时间并减少网络带宽使用。 在配置中,您可以找到处于注释状态的 gzip 配置,但您可以根据需要取消注释和修改 gzip。 由于 gzip 压缩过程会使用系统资源,如果您的资源有限,请根据它修改配置,例如仅压缩特定类型的文件、压缩级别等。

内容压缩

缓存静态内容

在现代 Web 开发中,大部分内容都是静态提供给浏览器或客户端的,因此缓存静态文件可以更快地加载内容。 当内容从缓存加载时,它还将减少对 Nginx 的连接请求。 要启动缓存过程,请将以下指令添加到 Nginx 虚拟主机配置文件中。

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

上述指令将资源文件缓存 30 天。 您可以根据需要设置缓存到期日期。

缓冲

缓冲可以使客户端和服务器之间的通信更加高效,因为它会保留部分响应,直到缓冲区填满为止。 如果响应高于实际缓冲区大小,Nginx 会将响应写入磁盘,这可能会导致性能问题。 您可以更新以下指令以根据您的要求调整缓冲区大小。

Client_body_buffer_size:它确定用于保存客户端响应数据的实际缓冲区大小。

Client_header_buffer_size:它管理客户端标头的大小。 通常将值设置为 1k 就足够了。

Client_max_body_size:它限制了客户端允许的最大正文响应。 如果主体大小超过其值,Nginx 将抛出“请求实体太大”错误。

要调整缓冲大小,请在 http 部分添加以下指令。

http {
…
client_body_buffer_size 80k;
client_max_body_size 9m;
client_header_buffer_size 1k;
...
}

访问日志缓冲

日志记录是调试问题和审计的关键角色之一。 由于日志记录会存储每个请求数据,这些数据会影响 I/O 周期和 CPU,从而导致性能问题。 您可以通过启用对日志的缓冲来减少这种影响。 一旦缓冲区大小达到其限制,Nginx 将缓冲区内容写入日志。 您可以通过将具有大小值的缓冲区参数添加到访问日志指令来启用缓冲。

access_log /var/log/nginx/access.log main buffer=16k;

或者您可以通过以下方式禁用访问日志(如果不需要)。

access_log off;

限制超时值

限制超时值将提高 Nginx 的性能。 Nginx 将在给定的时间段内等待客户端的正文和标头请求。 如果他们没有及时收到响应数据,Nginx 会为相应的客户端触发超时。 超时值可以由以下指令管理。 要设置超时持续时间,请在 http 部分中复制粘贴下面给出的指令。

client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 13;
send_timeout 10;

Client body 和 header timeout 是 Nginx 从客户端请求中读取 header 和 body 的时间段。 如果未及时完成,请求将因超时错误而终止。 Keepalive_timeout 是 nginx 之后的持续时间 close 客户端连接保持活动连接保持打开状态。 Send_timeout 是客户端必须接收 Nginx 发送的响应的持续时间。

打开文件缓存

在 Linux 中几乎一切都是一个文件,当使用 open_file_cache 时,文件描述符和所有经常访问的文件都会缓存到服务器。 特别是当使用打开的文件缓存提供静态 Html 文件时,将提高 Nginx 的性能,因为它会在给定的时间间隔内打开并在内存中存储缓存。 将 open_file_cache 的以下指令放在 http 部分以启动缓存。

http {
...
open_file_cache max=1024 inactive=10s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

结论

这是通过简单修改 Nginx 配置文件来提高 Nginx 性能的 8 种方法。 我希望阅读本文能帮助您启动 Nginx 性能提升。

Nginx 性能调优