0

Nginx性能优化实战:10个让服务器速度翻倍的关键配置

2026.05.20 | youres | 16次围观

为什么要优化Nginx

Nginx本身已经很快了,但默认配置远远没有发挥出它的全部潜力。一个经过调优的Nginx,处理并发能力可以提升数倍,响应延迟大幅降低。这篇文章不讲理论,直接给你10个能落地的优化配置,改完就能见效。

一、Worker进程与连接数优化

这是最基础也是影响最大的优化项。

1. 自动分配Worker进程

worker_processes auto;

设为auto让Nginx自动检测CPU核心数,不用手动填数字。每个Worker进程绑定一个CPU核心,充分利用多核性能。

2. 提升单进程连接数

events {
    worker_connections 65535;
    multi_accept on;
    use epoll;
}
  • worker_connections:每个Worker最大连接数,默认1024太小,建议设为65535
  • multi_accept:允许一个Worker同时接受多个新连接
  • use epoll:Linux下使用epoll事件模型,效率最高

别忘了系统层面也要放开文件描述符限制:

ulimit -n 65535

或者在/etc/security/limits.conf中永久设置。

二、网络传输优化

3. 启用零拷贝文件传输

sendfile on;
tcp_nopush on;
tcp_nodelay on;
  • sendfile:内核直接传输文件,跳过用户态拷贝
  • tcp_nopush:配合sendfile,数据包攒够再发,减少网络开销
  • tcp_nodelay:小数据包立即发送,降低延迟

tcp_nopush和tcp_nodelay看似矛盾,实际是互补的:大文件传输用nopush攒包,小响应用nodelay快速返回。

4. 开启Gzip压缩

gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
gzip_vary on;
  • gzip_comp_level:压缩级别4是性价比最高的,再高CPU消耗大但压缩收益递减
  • gzip_min_length:小于1KB的文件不压缩,压缩反而更大
  • gzip_types:别只压缩text/html,CSS、JS、JSON、SVG都要加上

三、连接复用优化

5. 调整Keepalive长连接

keepalive_timeout 65;
keepalive_requests 10000;

默认的keepalive_requests值是100,对于高并发场景太低了。一个长连接上允许更多请求,减少TCP握手开销。

6. 对上游服务也启用Keepalive

upstream backend {
    server 127.0.0.1:8080;
    keepalive 32;
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Nginx作为反向代理时,与后端之间也要复用连接。keepalive 32表示保持32个空闲长连接池。

四、缓存策略优化

7. 静态资源客户端缓存

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff2|svg|eot|ttf)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

静态资源加上长期缓存头,浏览器不会重复请求。同时关闭access_log减少磁盘写入。

8. 代理缓存后端响应

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:100m max_size=1g inactive=60m;

location /api/ {
    proxy_cache api_cache;
    proxy_cache_valid 200 10m;
    proxy_cache_key ;
    add_header X-Cache-Status ;
    proxy_pass http://backend;
}

对变化不频繁的API响应做缓存,后端压力直接降一个量级。

五、SSL性能优化

9. 优化HTTPS握手开销

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
  • ssl_session_cache:缓存SSL会话参数,10m大约能存4万个会话
  • ssl_session_timeout:会话缓存1天有效,回访用户不用重新握手
  • ssl_protocols:只保留TLS 1.2和1.3,1.3握手只需1-RTT

六、日志与限流优化

10. 减少日志写入 + 限流防护

# 静态资源不记日志
location ~* \.(css|js|jpg|png|gif|ico|woff2)$ {
    access_log off;
}

# 限制恶意请求
limit_req_zone  zone=api_limit:10m rate=30r/s;
location /api/ {
    limit_req zone=api_limit burst=50 nodelay;
}

access_log是磁盘IO大户,静态资源关掉它。同时用limit_req防止接口被刷爆。

完整配置参考

把以上优化项整合到一个最小可用的nginx.conf:

worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    multi_accept on;
    use epoll;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    keepalive_requests 10000;

    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_types text/plain text/css application/json
               application/javascript text/xml application/xml
               image/svg+xml;
    gzip_vary on;

    open_file_cache max=10000 inactive=30s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    limit_req_zone  zone=api_limit:10m rate=30r/s;

    # ... server块按需配置
}

优化前后怎么对比

改完配置别光靠感觉,用压测工具量化效果:

ab -n 10000 -c 200 http://your-site.com/

重点关注Requests per second(每秒请求数)和Time per request(平均响应时间)。通常优化后QPS能提升2-5倍,响应时间降低30%-60%。

相关文章推荐

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论
883文章数 0评论数
作者其它文章