文章最后更新时间:
Nginx是全球使用最广泛的Web服务器之一,以高性能、低资源消耗著称。但默认配置并非最优,需要根据实际业务场景进行优化。本文分享Nginx性能优化的完整方案。
一、Nginx性能优化的核心方向
- 并发处理能力:提升Worker进程和连接数配置
- 内存使用效率:优化缓冲区配置
- 网络传输效率:启用压缩、缓存、长连接
- 静态资源处理:优化静态文件服务配置
二、Worker进程优化
worker_processes配置
设置Worker进程数量,建议设置为CPU核心数。
worker_processes auto; # 自动检测CPU核心数 # 或明确指定 worker_processes 4;
worker_connections配置
设置每个Worker进程的最大连接数。
events {
worker_connections 4096; # 每个Worker最大连接数
use epoll; # 使用epoll事件模型(Linux)
multi_accept on; # 一次接受多个连接
}
理论最大并发连接数 = worker_processes × worker_connections
三、HTTP核心配置优化
启用sendfile
sendfile让Nginx直接在内核空间传输文件,减少用户空间和内核空间的数据拷贝。
sendfile on; tcp_nopush on; # 优化数据包发送 tcp_nodelay on; # 禁用Nagle算法,减少延迟
keepalive长连接配置
keepalive_timeout 65; # 长连接超时时间 keepalive_requests 100; # 每个长连接最大请求数
隐藏版本号
server_tokens off; # 隐藏Nginx版本号,提高安全性
四、Gzip压缩配置
启用压缩可大幅减少传输数据量,提升页面加载速度。
gzip on; gzip_vary on; gzip_min_length 1k; # 大于1KB才压缩 gzip_comp_level 6; # 压缩级别(1-9) gzip_types text/plain text/css application/json application/javascript text/xml; gzip_disable "msie6"; # 禁用对IE6的压缩
压缩级别建议:
- 1-3:压缩速度最快,压缩率较低
- 4-6:平衡压缩速度和压缩率,推荐
- 7-9:压缩率最高,但CPU消耗大
五、缓冲区优化
请求缓冲区
client_body_buffer_size 16k; # 请求体缓冲区 client_max_body_size 50m; # 最大请求体大小 client_header_buffer_size 1k; # 请求头缓冲区 large_client_header_buffers 4 8k; # 大请求头缓冲区
响应缓冲区
output_buffers 2 32k; postpone_output 1460;
六、静态资源缓存
浏览器缓存配置
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public, immutable";
access_log off; # 不记录访问日志
}
FastCGI缓存(PHP应用)
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=phpcache:100m inactive=60m max_size=512m;
location ~ .php$ {
fastcgi_cache phpcache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
}
七、连接优化
HTTP/2启用
listen 443 ssl http2; # 在SSL配置中启用HTTP/2
连接限制
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
limit_conn conn_limit 20; # 单IP最大20个并发连接
}
请求限制
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
limit_req zone=req_limit burst=20 nodelay; # 每秒10个请求,突发20个
}
八、日志优化
访问日志缓冲
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
静态资源不记录日志
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
access_log off;
}
九、配置示例汇总
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
gzip on;
gzip_vary on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript;
client_body_buffer_size 16k;
client_max_body_size 50m;
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
include /etc/nginx/conf.d/*.conf;
}
十、常见问题
Q:如何测试配置是否正确?
A:使用 nginx -t 测试配置语法。
Q:修改配置后如何生效?
A:使用 nginx -s reload 平滑重载配置。
Q:如何查看当前连接数?
A:使用命令 nginx-status 或 netstat -an | grep :80 | wc -l
Q:worker_connections设置多大合适?
A:根据服务器内存和业务并发量设置,一般1024-8192之间。
总结
Nginx性能优化的核心:Worker进程数=CPU核心数,启用sendfile和gzip,配置合适的缓冲区,开启浏览器缓存和FastCGI缓存。优化后可提升50%-200%的并发处理能力。
瀚煜云提供服务器托管及Nginx性能优化服务。

















暂无评论内容