Nginx性能调优手段
worker_processes设为CPU核心数(如auto自动检测),充分占用CPU资源;worker_connections(每个工作进程最大并发连接数)根据服务器负载调整(如10240),需配合worker_rlimit_nofile(单个进程最大文件描述符数)设置,避免“Too many open files”错误。epoll(use epoll;),提升高并发下的I/O处理效率,是Nginx高性能的关键之一。keepalive_timeout(长连接超时时间)设为65秒(平衡连接复用与资源占用),keepalive_requests(每个长连接最大请求数)设为100以上,减少TCP握手/挥手开销。gzip on;开启压缩,gzip_types包含文本、JSON、JS等格式(如text/plain text/css application/json),gzip_comp_level(压缩级别)设为5(平衡压缩率与CPU消耗),减少传输数据量。client_body_buffer_size(请求体缓冲区,如128k)、client_header_buffer_size(请求头缓冲区,如1k)、large_client_header_buffers(大请求头缓冲区,如4 8k),避免大请求导致的内存溢出或磁盘I/O。/etc/sysctl.conf,设置net.core.somaxconn(最大连接队列长度)为65535,net.ipv4.tcp_max_syn_backlog(SYN队列长度)为65535,net.ipv4.tcp_tw_reuse(TIME_WAIT连接复用)和net.ipv4.tcp_tw_recycle(加速TIME_WAIT回收)为1,优化TCP连接管理;扩大net.ipv4.ip_local_port_range(临时端口范围)为1024-65535,支持更多并发连接。/etc/security/limits.conf,设置nofile(最大文件描述符数)为65535以上(如* soft nofile 65535; * hard nofile 65535),避免高并发下连接被拒绝。aio on;(异步文件读取),提升静态文件读取效率,减少等待时间。worker_cpu_affinity将Nginx工作进程绑定到特定CPU核心(如worker_cpu_affinity 0001 0010 0100 1000;,4核绑定),减少进程间上下文切换,提高CPU利用率。expires(过期时间,如expires 30d;)和add_header Cache-Control "public";设置浏览器缓存,减少重复请求;open_file_cache(文件缓存,如open_file_cache max=1000 inactive=20s;)缓存打开的文件描述符,减少文件系统调用。proxy_cache_path定义缓存路径(如/var/cache/nginx,max_size=1g),proxy_cache启用缓存,proxy_cache_valid设置缓存有效期(如200 302 10m;),缓存后端响应,降低后端服务器负载。round-robin(默认,轮询)、least_conn(最少连接,适合长连接场景)、ip_hash(IP哈希,保持会话一致性),提升负载均衡效率。upstream中设置keepalive(如keepalive 32;),减少与后端服务器的TCP连接建立次数;代理配置中添加proxy_http_version 1.1;和proxy_set_header Connection "";,启用HTTP/1.1长连接。ssl_protocols设置支持的协议版本(如TLSv1.2 TLSv1.3,禁用过时的SSLv3),ssl_ciphers选择高性能加密套件(如TLS_AES_128_GCM_SHA256),提升加密效率。ssl_session_cache(如ssl_session_cache shared:SSL:10m;)和ssl_session_timeout(如ssl_session_timeout 10m;),复用SSL会话,减少TLS握手次数。access_log设置缓冲区(如buffer=32k)和刷新间隔(如flush=300s),减少磁盘I/O;error_log设置级别为crit(严重错误),避免不必要的日志记录。stub_status模块开启状态页(如location /nginx_status { stub_status on; allow 127.0.0.1; deny all; }),实时查看活跃连接数、请求数等指标;结合Prometheus+Grafana等工具,监控QPS、响应时间、错误率等性能指标,及时发现瓶颈。