本章节介绍如何优化 Nginx 性能。
worker_processes auto;
工作进程数原理:
Nginx 使用 Master-Worker 进程模型,Master 进程负责管理 Worker 进程,Worker 进程负责处理客户端请求。worker_processes 指令设置 Worker 进程数量,通常设置为 CPU 核心数,以充分利用多核 CPU 性能。
性能优化建议:
auto,自动设置为 CPU 核心数worker_processes 4events {
worker_connections 1024;
}
连接数原理:
每个 Worker 进程都有一个连接池,连接池的大小由 worker_connections 指定。当连接数超过 worker_connections 时,新的连接会被拒绝。最大连接数为 worker_processes × worker_connections。
性能优化建议:
worker_connections 的值http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
sendfile 原理:
sendfile 是一个系统调用,用于在文件描述符之间传输数据,避免数据在用户空间和内核空间之间复制。sendfile 直接在内核空间将文件数据传输到网络接口,大大提高了文件传输性能。
tcp_nopush 原理:
tcp_nopush 指令启用 TCP_NOPUSH 选项,该选项告诉操作系统不要立即发送数据,而是等待数据积累到一定量后再发送。这样可以减少 TCP 包的数量,提高网络传输效率。
tcp_nodelay 原理:
tcp_nodelay 指令禁用 Nagle 算法,该算法会延迟发送小数据包,以减少网络流量。禁用 Nagle 算法可以减少延迟,提高实时性。
性能优化建议:
sendfile,提高文件传输性能tcp_nopush,减少 TCP 包的数量tcp_nodelay,减少延迟http {
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json;
}
gzip 原理:
gzip 是一种数据压缩算法,可以压缩 HTTP 响应体,减少网络传输数据量,提高传输速度。gzip_min_length 指令设置启用 gzip 压缩的最小响应体大小,gzip_types 指令设置启用 gzip 压缩的 MIME 类型。
性能优化建议:
gzip,减少网络传输数据量gzip_min_length,避免压缩小文件gzip_types,只压缩文本类型的文件proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g;
server {
location / {
proxy_cache my_cache;
}
}
缓存原理:
proxy_cache 指令启用代理缓存,将后端服务器的响应缓存到本地磁盘,减少对后端服务器的请求,提高响应速度。proxy_cache_path 指令设置缓存路径、缓存级别、缓存键区域、缓存大小等参数。
性能优化建议:
proxy_cache,减少对后端服务器的请求proxy_cache_path,配置缓存路径和缓存大小proxy_cache_valid,设置缓存有效期http {
keepalive_timeout 65;
keepalive_requests 100;
}
保持连接原理:
keepalive_timeout 指令设置保持连接的超时时间,keepalive_requests 指令设置每个保持连接可以处理的最大请求数。保持连接可以减少 TCP 连接建立和关闭的开销,提高性能。
性能优化建议:
keepalive_timeout,设置保持连接的超时时间keepalive_requests,设置每个保持连接可以处理的最大请求数keepalive,设置与后端服务器保持连接的数量access_log off;
禁用访问日志原理: 访问日志会占用磁盘空间和 I/O 资源,禁用访问日志可以提高性能。
client_max_body_size 10m;
限制请求体大小原理:
client_max_body_size 指令设置客户端请求体的最大大小,限制请求体大小可以防止大文件上传占用过多资源。
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
启用缓冲原理:
proxy_buffering 指令启用代理缓冲,将后端服务器的响应缓冲到内存,减少对后端服务器的请求,提高响应速度。