优化Nginx性能需从基础配置、缓存策略、内核参数、负载均衡、静态资源处理等多维度入手,以下是具体可操作的步骤:
worker_processes设置为CPU物理核心数(可通过grep processor /proc/cpuinfo | wc -l查看),若服务器需处理高并发,可设置为auto让Nginx自动适配。例如,4核CPU建议设为worker_processes 4;或worker_processes auto;。events块中启用epoll(Linux下高性能事件驱动模型),并设置worker_connections为较大值(如10240),配合multi_accept on让单个进程同时接受多个新连接,提升并发处理能力。示例配置:events {
use epoll;
worker_connections 10240;
multi_accept on;
}
expires头(如7d~30d),并添加Cache-Control: public,让浏览器缓存文件,减少服务器负载。示例:location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d;
add_header Cache-Control "public";
access_log off; # 关闭静态文件访问日志
}
proxy_cache缓存后端响应,降低数据库查询次数。配置示例:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m 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_use_stale error timeout updating; # 缓存过期时仍可使用旧数据
}
}
修改/etc/sysctl.conf文件,优化TCP/IP栈与文件描述符限制,提升系统吞吐量:
# 增加文件描述符限制(Nginx worker_rlimit_nofile需与之匹配)
fs.file-max = 100000
# 增加TCP连接队列长度(避免SYN洪水攻击导致连接失败)
net.core.somaxconn = 65535
# 启用TCP Fast Open(减少握手延迟)
net.ipv4.tcp_fastopen = 3
# 关闭TCP TIME_WAIT状态(快速复用端口)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# 应用配置
sysctl -p
同时,在Nginx配置中设置worker_rlimit_nofile(如worker_rlimit_nofile 50000;),确保进程可打开的文件数不超过系统限制。
sendfile on;让文件直接从磁盘传输到网卡,避免数据在用户态与内核态之间拷贝;aio on;启用异步I/O,适合大文件传输(如视频);directio 4m;对大于4M的文件使用直接I/O,绕过页缓存。示例:http {
sendfile on;
aio on;
directio 4m;
tcp_nopush on; # 在sendfile开启时,合并小包发送
tcp_nodelay on; # 禁用Nagle算法,及时发送小数据包
}
gzip_min_length 1k(小于1K的文件不压缩)、gzip_comp_level 4(平衡压缩率与CPU消耗)。示例:http {
gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript;
gzip_vary on; # 兼容代理缓存
}
使用upstream模块将请求分发到多个后端服务器,提升整体处理能力。推荐使用least_conn(最少连接)算法,避免单个服务器过载;设置keepalive连接池,减少TCP握手开销。示例:
upstream backend {
least_conn; # 最少连接算法
server 10.0.0.1 weight=5; # 权重高的服务器处理更多请求
server 10.0.0.2 max_fails=3 fail_timeout=30s; # 失败3次后剔除,30秒后重新尝试
keepalive 32; # 连接池大小
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection ""; # 清除默认的Connection头,保持长连接
}
}
error_log级别设为warn(仅记录警告及以上错误),减少日志写入量;对静态资源、健康检查接口关闭access_log,降低磁盘IO。示例:error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log buffer=32k flush=5m; # 缓冲日志,每5分钟写入一次
location /status {
access_log off; # 关闭健康检查接口日志
}
HIGH:!aNULL:!MD5),开启ssl_prefer_server_ciphers优先使用服务器加密套件,提升SSL握手效率。示例:server {
listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m; # 会话缓存,减少重复握手
ssl_session_timeout 10m;
}
nginx -t检查语法是否正确,避免因配置错误导致服务中断。ab(Apache Benchmark)或wrk工具模拟高并发请求,测试优化效果。示例:ab -n 100000 -c 500 http://yourdomain.com/ # 10万次请求,500并发
htop监控CPU、内存使用情况,iftop监控网络流量,nginx -T | grep active_connections查看Nginx活跃连接数,及时发现性能瓶颈。通过以上优化步骤,可显著提升Debian系统下Nginx的并发处理能力、降低资源消耗,适用于高流量网站的性能提升需求。需根据实际业务场景调整参数(如并发量、静态资源占比),并通过监控工具持续优化。