Nginx 是一个高性能的 HTTP 和反向代理服务器,它的优化可以提升网站的性能和稳定性。
以下是一些基于搜索结果的 Nginx 负载参数优化经验分享。
No.1 Worker Processes
"""nginx
worker_processes auto; # 自动设置与 CPU 核心数相同的进程数
"""
这个指令用来设置 Nginx 运行的工作进程数。通常情况下,每个 CPU 核心分配一个工作进程可以取得较好的性能。
No.2 Worker CPU Affinity
"""nginx
worker_cpu_affinity 0001 0010 0100 1000; # 为每个工作进程分配特定的 CPU 核心
"""
通过为每个工作进程分配特定的 CPU 核心,可以提高 CPU 缓存的效率,减少进程间的上下文切换。
No.3 Worker Connections
"""nginx
worker_connections 10240; # 每个工作进程的最大连接数
"""
这个指令定义了每个工作进程可以打开的最大连接数,默认值通常是 512,但现代服务器硬件通常可以处理更高的连接数。
No.4 Events Configuration
"""nginx
use epoll; # 在 Linux 上使用高效的 I/O 多路复用模型
events {
worker_connections 10240; # 每个工作进程可以同时处理的连接数
}
"""
`use epoll;` 指定了事件处理模型,在 Linux 系统上,epoll 是一个高性能的 I/O 多路复用模型。
No.5 Sendfile
"""nginx
sendfile on; # 开启高效文件传输模式
"""
`sendfile` 指令用于启用高效文件传输模式,可以减少 CPU 开销,因为它允许操作系统直接传输文件数据到网络,而不需要复制到用户空间。
No.6 TCP Nopush
"""nginx
tcp_nopush on; # 结合 Sendfile 使用,减少网络报文段的数量
"""
`tcp_nopush` 指令用于确保数据在发送到网络之前被缓存,与 `sendfile` 结合使用可以提高网络传输效率。
No.7 Keepalive Timeout
"""nginx
keepalive_timeout 65; # 长连接超时时间
"""
`keepalive_timeout` 设置了长连接的超时时间,可以根据服务器的业务需求进行调整。
No.8 Gzip Compression
"""nginx
gzip on; # 开启 Gzip 压缩
gzip_min_length 1k; # 页面字节数小于 1k 不压缩
gzip_buffers 4 32k; # 设置压缩缓冲区大小
gzip_http_version 1.1; # 设置压缩版本
gzip_comp_level 6; # 设置压缩级别
gzip_types text/css text/xml application/javascript; # 设置需要压缩的 MIME 类型
"""
通过启用 Gzip 压缩,可以减少传输的数据量,加快页面加载速度。但要注意,对小文件进行压缩可能不会减少其大小。
No.9 Proxy Settings
"""nginx
proxy_connect_timeout 90; # 代理连接超时时间
proxy_send_timeout 90; # 代理发送超时时间
proxy_read_timeout 90; # 代理读取超时时间
proxy_buffers 4 32k; # 设置代理缓冲区大小
"""
这些指令用于调整代理服务器的超时设置和缓冲区大小,可以根据后端服务器的性能进行调整。
No.10 Linux System Tuning
"""shell
net.core.somaxconn = 262144 # 调整系统同时发起的tcp连接数
net.ipv4.tcp_tw_recycle = 1 # 启用 TCP 连接重用
net.ipv4.tcp_fin_timeout = 15 # 减少临时端口的等待时间
"""
调整 Linux 系统内核参数可以提升服务器的网络性能。
No.11 Access Log Buffering
"""nginx
access_log /var/log/nginx/access.log main buffer=16k flush=5m; # 使用缓冲区记录访问日志
"""
通过设置日志缓冲区,可以减少磁盘 I/O 操作,提高性能。
No.12 Limitations
"""nginx
limit_conn perip 2; # 限制单个 IP 地址的连接数
limit_rate 300k; # 限制单个连接的速率
"""
使用 `limit_conn` 和 `limit_rate` 可以限制客户端的连接数和带宽使用,防止单个客户端占用过多资源。