Nginx性能优化实战指南:从配置到调优的完整方案

文章最后更新时间:2026-04-13 22:40:19

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性能优化服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容