工作进程与连接数
设置worker_processes为auto(自动匹配CPU核心数)或手动指定(如4核CPU设为4),充分利⽤CPU资源;通过worker_connections调整每个工作进程的最大连接数(如10240),需结合worker_rlimit_nofile(设置为65535以上)避免“Too many open files”错误。示例:
worker_processes auto;
events {
worker_connections 10240;
use epoll; # Linux下推荐使用epoll事件模型
multi_accept on; # 一次接受多个新连接
}
高效文件传输
启用sendfile实现零拷贝传输,减少CPU消耗;配合tcp_nopush(仅在sendfile开启时有效)优化数据包发送,降低网络延迟。示例:
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on; # 禁用Nagle算法,减少延迟
}
压缩传输
启用gzip压缩响应数据(如文本、JSON、JS等),减少传输体积(通常可压缩至原大小的30%-70%),提升页面加载速度。示例:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡值)
gzip_min_length 1024; # 仅压缩大于1KB的文件
缓冲区调整
合理设置请求体与头的缓冲区大小,避免大请求导致的内存溢出或磁盘I/O。示例:
client_body_buffer_size 16k; # 请求体缓冲区
client_header_buffer_size 1k; # 请求头缓冲区
client_max_body_size 8m; # 最大请求体大小(如上传文件限制)
large_client_header_buffers 4 4k; # 大请求头缓冲区
日志优化
关闭不必要的访问日志(如静态资源),将错误日志级别调整为crit(仅记录严重错误),减少磁盘I/O。示例:
access_log off; # 关闭访问日志(或指定路径)
error_log /var/log/nginx/error.log crit; # 错误日志级别
静态资源缓存
为静态文件(图片、CSS、JS等)设置浏览器缓存(expires)和Cache-Control头,减少重复请求。示例:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 浏览器缓存30天
add_header Cache-Control "public, no-transform";
}
代理缓存
使用proxy_cache缓存后端响应(如PHP、API),降低后端服务器负载。示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
}
}
负载均衡
通过upstream模块将请求分发到多个后端服务器,提升并发处理能力。常用算法:
round_robin(默认,轮询):适合后端服务器性能相近的场景;least_conn(最少连接):适合长连接场景(如上传文件);ip_hash(IP哈希):适合需要会话保持的应用(如登录状态)。示例:upstream backend {
least_conn; # 最少连接算法
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
location / {
proxy_pass http://backend;
}
}
SSL/TLS优化
启用HTTP/2(多路复用,提升传输效率);优化TLS配置(使用TLS 1.3、高性能加密套件);开启会话缓存(减少SSL握手时间)。示例:
server {
listen 443 ssl http2; # 启用HTTP/2
ssl_protocols TLSv1.3 TLSv1.2; # 仅使用TLS 1.3/1.2
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384'; # 高性能加密套件
ssl_session_cache shared:SSL:10m; # 会话缓存
ssl_session_timeout 10m; # 会话超时时间
}
防恶意请求
添加规则拦截常见压力测试工具(如ApacheBench、JMeter)和恶意请求(如空格注入),保护服务器安全。示例:
if ($http_user_agent ~* (ApacheBench|WebBench|Jmeter)) {
return 503; # 返回服务不可用
}
if ($request_uri ~ " ") {
return 444; # 直接关闭连接(Nginx特有状态码)
}
文件描述符限制
修改/etc/security/limits.conf,增加Nginx进程的文件描述符限制(避免高并发下“Too many open files”错误)。示例:
* soft nofile 65535
* hard nofile 65535
网络参数优化
调整内核参数(如/etc/sysctl.conf),优化TCP连接处理:
net.core.somaxconn:增加连接队列长度(如65535);net.ipv4.tcp_max_syn_backlog:增加SYN队列长度(如65535);net.ipv4.tcp_tw_reuse:启用TIME_WAIT连接复用(减少连接建立时间);net.ipv4.tcp_fastopen:启用TCP Fast Open(减少握手时间)。示例:sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fastopen=3
硬件优化
proxy_cache、gzip缓存);worker_processes和worker_cpu_affinity(将进程绑定到特定核心,减少上下文切换)。nginx -t检查配置语法;使用top、htop监控CPU使用率;通过ss -s查看连接数;通过access_log分析QPS(每秒请求数)、响应时间($request_time)、错误率(4xx/5xx占比)。ab(Apache Benchmark)、wrk进行压力测试,模拟高并发场景。以上优化措施需根据服务器硬件配置(CPU、内存、存储)、业务场景(静态/动态内容比例、并发量)进行调整,建议修改配置后通过nginx -t检查语法,再重启Nginx(systemctl restart nginx)使更改生效。