温馨提示×

LNMP中Nginx怎样优化配置

小樊
42
2025-12-27 19:03:42
栏目: 编程语言

LNMP中 Nginx 优化配置要点

一 核心并发与事件模型

  • 设置工作进程数与文件描述符:将worker_processes设为auto(或CPU物理核心数),提升worker_rlimit_nofile65535以避免“Too many open files”。
  • 选择高效事件模型:Linux使用use epoll;开启multi_accept on提高连接接收效率。
  • 调整每进程并发:worker_connections建议从10240起步,结合内存与业务压测逐步上调;最大并发估算为worker_processes × worker_connections(反向代理场景常需再除以约4以计入连接复用与开销)。
  • 开启长连接复用:在http段设置keepalive_timeout 65keepalive_requests 100,降低握手与TIME_WAIT带来的开销。

二 传输压缩与静态资源缓存

  • 启用高效传输:sendfile on; tcp_nopush on; tcp_nodelay on; 组合可在静态资源传输中减少拷贝与延迟。
  • 压缩文本资源:开启gzip on; gzip_vary on; gzip_comp_level 6; gzip_min_length 1024;,并按需配置gzip_types(如 text/css、application/javascript 等),在压缩率与CPU之间取平衡。
  • 静态资源缓存:对图片、CSS、JS等设置长期缓存,例如:
    location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control “public, immutable”; }
    高并发场景可对静态资源关闭访问日志(access_log off;)以降低I/O。

三 动态请求与 PHP-FPM 协同

  • FastCGI 关键缓冲:为PHP设置合适的缓冲与超时,示例:
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_read_timeout 300;
  • PHP-FPM 进程模型:根据CPU与内存调pm.max_children(常见经验值为CPU核心数×2+1),并启用OpCache减少字节码编译开销。
  • 反向代理/缓存(如适用):对后端动态内容启用缓存,示例:
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
    proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;

四 安全与 TLS 配置

  • 隐藏版本与访问控制:设置server_tokens off;,禁止访问敏感文件(如**/.ht**、/.git/.svn)。
  • 仅启用安全协议与套件:使用ssl_protocols TLSv1.2 TLSv1.3;,套件优先选择ECDHE系(如:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384 或 ECDHE-ECDSA/ RSA-AES256-GCM-SHA384),并设置ssl_prefer_server_ciphers on;
  • 会话复用与性能:开启ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;,必要时启用ssl_session_tickets on;
  • 启用 HTTP/2:在443端口监听中增加http2,提升多小资源页面的并行传输能力。

五 系统级调优与变更流程

  • 文件描述符与系统限制:在**/etc/security/limits.conf中提升软硬限制(如nofile 65535**),并确认Nginx worker可继承该限制。
  • 内核网络参数(/etc/sysctl.conf 或 sysctl -w):
    net.core.somaxconn = 65535; net.ipv4.tcp_max_syn_backlog = 65535;
    net.ipv4.tcp_tw_reuse = 1; net.ipv4.tcp_fin_timeout = 30;
    内存充足时可考虑vm.swappiness = 0以减少换页。
  • 文件系统与I/O:优先使用XFS,挂载参数noatime,nodiratime降低元数据写入。
  • 变更与验证:每次修改后执行nginx -t校验语法,使用systemctl reload nginxnginx -s reload平滑生效;生产变更前务必在测试环境验证并用top/htop、ss -tulnp及访问/错误日志持续观测。

0