Bootstrap

Nignx性能优化最全说明

基本优化参数

1. worker_processes
worker_processes auto;

说明及好处

  • 自动配置工作进程数,通常设置为与CPU核心数相同或略多,可以充分利用多核CPU,提高并发处理能力。
2. worker_connections
worker_connections 10240;

说明及好处

  • 每个工作进程的最大连接数,增大可以处理更多并发连接。根据服务器内存和需求适当调整。
3. worker_rlimit_nofile
worker_rlimit_nofile 65535;

说明及好处

  • 设置每个工作进程可打开的最大文件描述符数,与ulimit设置保持一致,确保不会因为文件描述符不足而影响性能。
4. use epoll
events {
    use epoll;
}

说明及好处

  • epoll是Linux下高效的I/O多路复用机制,适用于高并发场景,提高性能。

HTTP核心优化参数

5. sendfile
sendfile on;

说明及好处

  • 开启sendfile可以减少数据拷贝,提高文件传输效率。
6. tcp_nopush
tcp_nopush on;

说明及好处

  • 减少TCP包的数量,优化发送性能,特别适用于大文件传输。
7. tcp_nodelay
tcp_nodelay on;

说明及好处

  • 关闭Nagle算法,减少延迟,适用于实时性要求较高的应用。
8. keepalive_timeout
keepalive_timeout 65;

说明及好处

  • 设置keep-alive连接的超时时间,增大可以减少重新建立连接的开销,但需要平衡资源占用。
9. client_max_body_size
client_max_body_size 100m;

说明及好处

  • 限制客户端请求主体的最大大小,防止大文件上传导致服务器资源耗尽。

缓存和压缩优化

10. gzip
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

说明及好处

  • 开启gzip压缩,减少传输数据量,提高响应速度。压缩级别和压缩类型根据需求调整。
11. proxy_cache
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_pass http://backend;
    }
}

说明及好处

  • 配置代理缓存,提高响应速度,减少后端服务器压力。缓存路径、大小和时间根据实际需求调整。

安全性优化

12. limit_connlimit_req
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location / {
            limit_conn addr 10;
            limit_req zone=one burst=5;
        }
    }
}

说明及好处

  • 限制单个IP的并发连接数和请求频率,防止恶意流量和DDoS攻击。

日志优化

13. access_logerror_log
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;

说明及好处

  • 配置访问日志和错误日志,设置日志缓冲和刷新时间,减少I/O操作对性能的影响。

示例配置

以下是一个综合示例配置:

worker_processes auto;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections 10240;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log main buffer=32k flush=5m;
    error_log /var/log/nginx/error.log warn;

    server {
        listen       80;
        server_name  example.com;

        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_pass http://backend;
            limit_conn addr 10;
            limit_req zone=one burst=5;
        }
    }
}

通过这些参数调优,可以显著提升Nginx服务器的性能,确保网站在高并发、高负载的情况下依然保持快速响应和低延迟。实际使用中需要根据具体场景进行调整和测试,以达到最佳效果。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;