Nginx作为高性能的Web服务器和反向代理服务器,通过合理的配置可以显著提升页面的加载速度和接口的响应时间。以下是基于最新实践和权威资料的全面优化方案。
Gzip压缩配置:
gzip on;
gzip_types application/xml application/json text/css text/javascript application/javascript;
gzip_vary on;
gzip_comp_level 6; # 压缩级别1-9,6是性价比最佳点
gzip_min_length 500; # 小于500字节的文件不压缩
启用Gzip后,数据传输量可减少约80%,例如从1MB减少到260KB。对于长期访问用户,每天可节省高达62MB带宽。
Brotli压缩(更高效):
brotli on;
brotli_comp_level 8; # 压缩级别1-11
brotli_types text/plain application/json application/javascript text/css;
brotli_min_length 20; # 最小压缩长度(字节)
Brotli相比Gzip能提供17-25%更高的压缩效率,特别适合文本内容。但需要额外安装ngx_brotli模块。
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
设置静态资源长期缓存可减少80%以上的重复请求。对于频繁更新的文件,可使用文件哈希作为文件名实现"永不过期"策略。
sendfile on; # 启用高效文件传输
tcp_nopush on; # 配合sendfile使用,优化TCP包发送
open_file_cache max=1000 inactive=20s; # 缓存文件描述符
open_file_cache_valid 30s; # 缓存验证时间
location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 超时设置
proxy_connect_timeout 5s; # 连接后端超时
proxy_send_timeout 5s; # 发送请求超时
proxy_read_timeout 5s; # 读取响应超时
}
合理的超时设置可防止慢速后端阻塞Nginx。
proxy_buffering on;
proxy_buffer_size 128k; # 单个缓冲区大小
proxy_buffers 100 128k; # 缓冲区数量*大小
proxy_busy_buffers_size 256k; # 忙碌时缓冲区大小
缓冲区设置直接影响代理性能,过大消耗内存,过小增加I/O操作。对于高并发API,建议测试不同值找到最佳平衡。
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
keepalive 100; # 保持的连接数
keepalive_timeout 60s; # 保持时间
}
保持连接可减少TCP握手开销,提升高并发下的响应速度。
worker_processes auto; # 自动匹配CPU核心数
worker_cpu_affinity 01 10; # 2核CPU绑定(优化缓存命中)
worker_rlimit_nofile 100000; # 每个进程文件描述符限制
events {
worker_connections 4096; # 每个进程最大连接数
multi_accept on; # 一次性接受所有新连接
}
根据CPU核心数设置worker_processes可最大化利用硬件资源。
http {
tcp_nodelay on; # 禁用Nagle算法
tcp_nopush on; # 配合sendfile使用
keepalive_timeout 60s; # 客户端连接保持时间
keepalive_requests 1000; # 单个连接最大请求数
}
proxy_cache_path /path/to/cache levels=1:2 keys_zone=api_cache:10m max_size=10g inactive=60m;
location /api/ {
proxy_cache api_cache;
proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟
proxy_cache_valid 404 1m; # 404缓存1分钟
proxy_cache_use_stale error timeout updating;
}
API响应缓存可显著减少后端负载,提升响应速度。需注意设置合理的缓存时间和缓存键。
listen 443 ssl http2; # 启用HTTP/2
ssl_protocols TLSv1.2 TLSv1.3;
HTTP/2的多路复用可减少延迟,提升页面加载速度。
nginx -t
测试配置,nginx -s reload
重载配置$upstream_response_time
和$request_time
通过以上综合优化,Nginx可显著提升页面加载速度(减少80%以上带宽)和API响应时间(降低50%以上延迟)。建议根据实际业务需求选择适合的优化策略,并持续监控性能指标。