linux

nginx性能调优有哪些参数

小樊
45
2025-10-12 12:11:23
栏目: 编程语言

Nginx性能调优关键参数分类及说明

一、进程模型调优(决定并发处理能力)

worker_processes:指定Nginx工作进程数量,通常设置为CPU核心数(或auto自动检测),避免超过核心数导致进程切换开销。例如:worker_processes auto;worker_processes 4;
worker_connections:每个worker进程能处理的最大并发连接数,需结合内存、带宽及应用特性设置(如静态资源服务器可适当调大)。例如:events { worker_connections 1024; }
worker_cpu_affinity:将worker进程绑定到特定CPU核心,减少上下文切换开销(适用于高并发场景)。例如:worker_cpu_affinity 0001 0010 0100 1000;(4核CPU)。
worker_rlimit_nofile:单个worker进程能打开的最大文件描述符数,需大于worker_processes × worker_connections(避免“Too many open files”错误)。例如:worker_rlimit_nofile 100000;

二、事件驱动模型调优(提升I/O效率)

use epoll/kqueue:选择高效的事件驱动模型(Linux下推荐epoll,FreeBSD下推荐kqueue),大幅提高并发处理能力。例如:events { use epoll; }
multi_accept:允许单个worker进程一次性接受多个新连接,减少accept系统调用次数。例如:events { multi_accept on; }
accept_mutex:禁用accept锁(off),避免worker进程竞争accept锁导致的性能瓶颈(仅当worker_connections较大时有效)。例如:events { accept_mutex off; }

三、连接与超时调优(减少连接开销)

keepalive_timeout:Keep-Alive连接的保持时间(秒),延长该时间可减少TCP握手次数,但过大会占用连接资源(建议65-300秒)。例如:http { keepalive_timeout 65; }
keepalive_requests:单个Keep-Alive连接允许的最大请求数,设置较大值(如10000)可提高连接复用率。例如:http { keepalive_requests 10000; }
client_body_timeout/client_header_timeout:客户端请求体/请求头的超时时间(秒),避免长时间等待无效请求(建议10-30秒)。例如:http { client_body_timeout 30; client_header_timeout 30; }
send_timeout:向客户端发送响应的超时时间(秒),避免长时间占用连接(建议10-30秒)。例如:http { send_timeout 10; }

四、缓冲区调优(减少磁盘I/O)

client_body_buffer_size:请求体缓冲区大小(如16k-64k),足够容纳大部分请求体(如上传文件),避免频繁写入临时文件。例如:http { client_body_buffer_size 16k; }
client_header_buffer_size:请求头缓冲区大小(如1k-4k),适配大多数请求头(如User-Agent、Cookie)。例如:http { client_header_buffer_size 4k; }
large_client_header_buffers:超大请求头缓冲区数量与大小(如4个32k缓冲区),处理超过client_header_buffer_size的请求头(如长URL)。例如:http { large_client_header_buffers 4 32k; }
client_max_body_size:允许客户端上传的最大文件大小(如20m-100m),避免大文件上传导致的内存溢出。例如:http { client_max_body_size 20m; }

五、缓存调优(降低后端负载)

静态资源缓存:通过expiresadd_header指令设置浏览器缓存,减少重复请求(如图片、CSS、JS文件)。例如:location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; add_header Cache-Control "public, max-age=31536000"; }
代理缓存:使用proxy_cache_path定义缓存路径(如/data/nginx/cache),proxy_cache指令启用缓存,proxy_cache_valid设置缓存有效期(如200状态码缓存10分钟)。例如:location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; }
open_file_cache:缓存打开的文件描述符(如max=1000表示缓存1000个文件),加速静态文件访问(如open_file_cache max=1000 inactive=20s;)。

六、压缩调优(减少传输体积)

gzip:启用Gzip压缩(on),减少文本、JSON、JS等文件的传输体积(建议开启)。例如:http { gzip on; }
gzip_types:指定需要压缩的文件类型(如text/plain application/json application/javascript),避免压缩图片、视频等二进制文件(已内置压缩)。例如:http { gzip_types text/plain text/css application/json; }
gzip_comp_level:压缩级别(1-9),级别越高压缩率越高,但CPU消耗越大(建议4-6)。例如:http { gzip_comp_level 5; }
gzip_min_length:仅压缩超过指定大小的文件(如1k),避免小文件压缩反而增加CPU开销。例如:http { gzip_min_length 1k; }

七、SSL/TLS调优(提升加密性能)

ssl_protocols:仅保留安全的SSL/TLS协议(如TLSv1.2 TLSv1.3),禁用过时的协议(如SSLv2、SSLv3)。例如:server { ssl_protocols TLSv1.2 TLSv1.3; }
ssl_ciphers:使用高性能加密套件(如TLS_AES_128_GCM_SHA256 TLS_AES_256_GCM_SHA384),避免弱加密算法(如RC4、DES)。例如:server { ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384; }
ssl_session_cache:启用会话缓存(如shared:SSL:10m),复用SSL会话(减少握手次数),提高HTTPS性能。例如:server { ssl_session_cache shared:SSL:10m; }
ssl_session_timeout:会话缓存超时时间(如10分钟),平衡安全性与性能(建议5-30分钟)。例如:server { ssl_session_timeout 10m; }

八、HTTP/2调优(提升并发能力)

listen 443 ssl http2:启用HTTP/2协议,利用多路复用、头部压缩等特性,提高页面加载速度(需SSL证书支持)。例如:server { listen 443 ssl http2; }

九、负载均衡调优(分散请求压力)

upstream配置:使用upstream模块将请求分发到多个后端服务器,选择合适的负载均衡算法(如round-robin轮询、least_conn最少连接、ip_hashIP哈希)。例如:upstream backend { server backend1.example.com; server backend2.example.com; least_conn; }

十、系统级调优(支撑高并发)

内核参数调整:修改/etc/sysctl.conf文件,优化TCP栈参数(如net.core.somaxconn=65535net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_max_syn_backlog=16384),提高网络性能。例如:sysctl -w net.core.somaxconn=65535;
文件描述符限制:修改/etc/security/limits.conf文件,提高系统允许的最大文件描述符数(如* soft nofile 100000* hard nofile 100000),避免“Too many open files”错误。例如:echo "* soft nofile 100000" >> /etc/security/limits.conf;

0
看了该问题的人还看了