如何优化Ubuntu Nginx的性能
导读:Ubuntu 上优化 Nginx 性能的系统化清单 从系统资源、Nginx 核心参数、静态资源与压缩、反向代理缓存、连接与速率控制、监控验证六个方面入手,可显著提升吞吐与稳定性。 一 系统层面优化 文件描述符与进程限制 提升进程可打开文...
Ubuntu 上优化 Nginx 性能的系统化清单
从系统资源、Nginx 核心参数、静态资源与压缩、反向代理缓存、连接与速率控制、监控验证六个方面入手,可显著提升吞吐与稳定性。
一 系统层面优化
- 文件描述符与进程限制
- 提升进程可打开文件数,编辑 /etc/security/limits.conf:
- 添加:* soft nofile 65535;* hard nofile 65535;root 同值
- 在 Nginx 主配置中设置:worker_rlimit_nofile 65535;确认 worker_processes 与 CPU 核心匹配(如 auto 或设为核心数)。这能避免 “too many open files”。
- 提升进程可打开文件数,编辑 /etc/security/limits.conf:
- TCP/IP 与内核网络参数
- 编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-nginx.conf,示例:
- fs.file-max = 999999
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_keepalive_time = 15
- net.ipv4.tcp_fin_timeout = 15
- net.ipv4.tcp_max_tw_buckets = 5000
- net.core.netdev_max_backlog = 262144
- net.ipv4.tcp_max_orphans = 262144
- 应用:sysctl -p。上述设置有助于在高并发下更快回收连接、提升队列与稳定性。
- 编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-nginx.conf,示例:
- I/O 模型
- events { use epoll; multi_accept on; } (Linux 推荐),减少上下文切换与提高事件分发效率。
二 Nginx 核心参数优化
- 进程与连接
- worker_processes auto; (或设为 CPU 核心数)
- events { worker_connections 16384; use epoll; multi_accept on; }
- 理论最大并发连接数 ≈ worker_processes × worker_connections(再受限于系统句柄与端口资源)。
- 传输与缓冲
- sendfile on; (零拷贝,提高静态文件效率)
- tcp_nopush on; 与 tcp_nodelay on; (配合长连接与静态资源传输优化)
- 长连接复用
- keepalive_timeout 65; keepalive_requests 100; (减少握手开销,提升复用率)
三 静态资源与压缩
- 静态资源缓存
- 对图片、字体、JS/CSS 等设置强缓存头,示例:
- location ~* .(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
- expires 365d;
- add_header Cache-Control “public, immutable”;
- access_log off; # 可选:降低日志压力
- }
- location ~* .(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
- 对图片、字体、JS/CSS 等设置强缓存头,示例:
- 压缩传输
- 启用 Gzip,示例:
- gzip on;
- gzip_vary on;
- gzip_min_length 1024;
- gzip_comp_level 5;
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- 若上游已压缩,可启用 gzip_static on; 减少重复压缩开销。
- 启用 Gzip,示例:
四 反向代理与缓存
- 代理缓冲与超时
- 合理设置缓冲与超时,减少上游阻塞对 Nginx 的影响:
- proxy_buffering on;
- proxy_buffer_size 64k;
- proxy_buffers 4 64k;
- proxy_busy_buffers_size 128k;
- proxy_connect_timeout 30s;
- proxy_send_timeout 60s;
- proxy_read_timeout 60s;
- 合理设置缓冲与超时,减少上游阻塞对 Nginx 的影响:
- 代理缓存
- 定义共享内存与磁盘缓存,示例:
- proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
- 在 location 中使用:proxy_cache my_cache; proxy_cache_valid 200 1h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
- 结合 Cache-Control、ETag 与 Vary,提升命中率并降低源站压力。
- 定义共享内存与磁盘缓存,示例:
五 连接与速率控制
- 限流与防滥用
- 定义共享内存区与速率:limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
- 在需要保护的 location 应用:limit_req zone=mylimit burst=5 nodelay;
- 可叠加连接数限制:limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10; (按业务评估阈值)
- 超时与头部
- client_header_timeout 15s; client_body_timeout 15s; (避免长时间挂起)
- 按需调整 client_max_body_size(如上传场景),避免过大请求占用资源。
六 监控验证与上线步骤
- 配置生效与平滑重载
- 检查语法:nginx -t
- 平滑重载:systemctl reload nginx(不中断现有连接)
- 日志与监控
- 结构化日志便于分析:log_format main ‘$remote_addr - $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” “$http_x_forwarded_for”’;
- 使用 journalctl、syslog-ng 或接入 Prometheus + Grafana 观测连接、请求耗时、5xx 比例、缓存命中率等关键指标,结合压测持续迭代参数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何优化Ubuntu Nginx的性能
本文地址: https://pptw.com/jishu/776210.html
