温馨提示×

LNMP中Nginx如何优化

小樊
34
2025-12-21 23:16:08
栏目: 编程语言

LNMP中Nginx优化要点

一 基础并发与进程模型

  • 设置工作进程数与CPU亲和:将worker_processes设为auto或匹配CPU核心数;启用worker_cpu_affinity auto减少上下文切换与核间竞争。
  • 提升文件描述符限制:设置worker_rlimit_nofile 65535(并在系统层放宽nofile上限),避免“too many open files”。
  • 高效事件模型与连接:Linux使用use epoll;根据内存与负载调大worker_connections(如16384/32768);开启multi_accept on提升accept效率。
  • 连接复用:开启keepalive,如keepalive_timeout 65keepalive_requests 100000,降低握手开销。
  • 传输层优化:启用sendfile ontcp_nopush on;按需开启tcp_nodelay on减少Nagle延迟。
  • 典型计算:最大并发连接数≈worker_processes × worker_connections(再受限于系统fd与内核backlog)。

二 静态资源与缓存策略

  • 静态资源长缓存:对图片、CSS、JS等设置expires 30dCache-Control “public”,减少重复请求与回源。
  • 开启压缩:启用gzip on,设置gzip_types(如text/css、application/javascript等),常用gzip_comp_level 2~6平衡CPU与体积。
  • 访问日志缓冲:使用缓冲与周期刷写降低I/O抖动,例如:
    access_log /var/log/nginx/access.log combined buffer=32k flush=300s;
  • 文件句柄与元数据缓存:启用open_file_cache,如:
    open_file_cache max=65535 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1;
  • 反向代理/动态内容缓存:配置proxy_cache_pathfastcgi_cache_path,示例:
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=fcgi:10m max_size=1g inactive=5m;
    并在对应location启用缓存与合适的缓存键/有效期策略。

三 反向代理与FastCGI关键参数

  • 上游与连接复用:为后端设置合理keepalive(如keepalive 32),复用后端连接,降低握手与TIME_WAIT。
  • 超时与缓冲:为代理与FastCGI设置匹配业务的超时,如fastcgi_read_timeout 300s;按并发调大fastcgi_buffersfastcgi_busy_buffers_size,减少磁盘临时文件与阻塞。
  • 头部与缓冲:合理设置client_header_buffer_size 4k/8klarge_client_header_buffers 4 4kclient_max_body_size 8m/50m(视业务上传而定)。
  • 典型片段:
    fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;
    fastcgi_buffer_size 4k; fastcgi_buffers 8 4k; fastcgi_busy_buffers_size 8k;
    client_max_body_size 50m;
  • 负载均衡(如有多台后端):使用upstream定义后端组,结合权重/健康检查与回退策略,提升可用性与吞吐。

四 安全与可观测性

  • 隐藏版本与降噪:设置server_tokens off减少信息泄露;错误日志级别按环境设为error/warn,避免高开销的debug在生产常开。
  • 加密与协议:启用TLSv1.2/TLSv1.3,使用强套件与ssl_prefer_server_ciphers on,并开启HSTS(如需要)。
  • 访问控制与防火墙:仅开放80/443与必要管理端口;使用ufw/iptables限制来源与速率。
  • 监控与压测:部署Prometheus + Grafana监控连接、请求耗时、缓存命中率、5xx比例等;定期ab/wrk压测验证配置变更效果。

五 系统层面与验证

  • 文件句柄与进程限制:在**/etc/security/limits.conf**放宽:
    • soft nofile 65535; * hard nofile 65535;
      并确保服务启动会话继承该限制(如systemd服务设置LimitNOFILE)。
  • 内核网络参数(示例,按带宽与并发调优):
    net.core.somaxconn 65535; net.ipv4.ip_local_port_range 1024 65535;
    net.ipv4.tcp_fin_timeout 30; net.ipv4.tcp_slow_start_after_idle 0;
    net.ipv4.tcp_fastopen 3; net.ipv4.tcp_syncookies 1;
    net.core.netdev_max_backlog 65535;
  • 验证与回滚:每次变更执行nginx -t检查语法,使用nginx -s reload平滑生效;变更前备份配置,分阶段灰度与压测,观察错误日志与监控指标再扩大范围。

0