温馨提示×

Linux LNMP如何优化Nginx配置

小樊
40
2025-12-10 02:56:48
栏目: 智能运维

LNMP环境下 Nginx 配置优化实操指南

一 基础进程与连接优化

  • 设置工作进程数与CPU亲和性:将worker_processes设为auto(或CPU核心数),并按核心数配置worker_cpu_affinity以减少上下文切换与CPU竞争。
  • 提升文件描述符限制:设置worker_rlimit_nofile 65535,并在系统层将ulimit -n 65535,同时在**/etc/security/limits.conf**写入“* soft/hard nofile 65535”,避免“too many open files”。
  • 事件模型与连接数:Linux使用use epoll;根据内存与负载调大worker_connections(如10240/65535),并开启multi_accept on以尽快接收新连接。
  • 典型配置片段:
    worker_processes auto;
    worker_cpu_affinity auto;
    worker_rlimit_nofile 65535;
    
    events {
        use epoll;
        worker_connections 10240;
        multi_accept on;
    }
    
    以上做法可显著提升并发处理与稳定性,是LNMP场景的通用起点。

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

  • 启用Gzip压缩:开启gzip on; gzip_vary on; gzip_comp_level 6;,并设置合适的gzip_types(如text/css、application/javascript等),在带宽受限与移动网络下收益明显。
  • 可选Brotli:若环境支持,启用brotli on; brotli_comp_level 6;并配置相同brotli_types,进一步降低体积。
  • 静态资源长缓存:对图片、字体、JS/CSS等设置长期Cache-Controlexpires,减少重复请求与回源。
  • 典型配置片段:
    http {
        gzip on;
        gzip_vary on;
        gzip_comp_level 6;
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
        brotli on;
        brotli_comp_level 6;
        brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    }
    
    压缩与缓存是“低成本高收益”的优化项,应优先启用。

三 超时与缓冲调优

  • 长连接复用:合理设置keepalive_timeout(如15–65秒)与keepalive_requests(如100–100000),在短连接与长连接业务间取平衡,降低握手开销。
  • 请求与响应超时:缩短client_body_timeout、client_header_timeout、send_timeout(如10–15秒)以避免慢客户端拖垮服务。
  • 缓冲区大小:根据业务请求头/体大小调整client_body_buffer_size(如10K)client_header_buffer_size(如1K)large_client_header_buffers 4 4Kclient_max_body_size(如8M/50M),减少磁盘临时文件与内存拷贝。
  • 典型配置片段:
    http {
        keepalive_timeout 65;
        keepalive_requests 1000;
    
        client_body_timeout 12;
        client_header_timeout 12;
        send_timeout 10;
    
        client_body_buffer_size 10K;
        client_header_buffer_size 1K;
        large_client_header_buffers 4 4K;
        client_max_body_size 50M;
    }
    
    超时与缓冲的“黄金法则”是:尽量在内存中处理,避免落盘;连接能复用就复用。

四 反向代理与负载均衡

  • 基本反向代理:设置必要的Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto请求头,确保后端获取真实客户端信息。
  • 负载均衡策略:根据业务选择round-robin(默认)/least_conn/ip_hash;为节点配置weight、max_fails、fail_timeout实现被动健康检查与故障隔离。
  • 典型配置片段:
    upstream backend {
        least_conn;
        server 10.0.0.11:9000 weight=3 max_fails=3 fail_timeout=30s;
        server 10.0.0.12:9000 weight=1 max_fails=3 fail_timeout=30s;
    }
    
    server {
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    通过策略与健康检查的组合,可显著提升后端可用性与吞吐。

五 安全与网络层优化及上线流程

  • 安全加固:关闭server_tokens隐藏版本;启用HTTP/2TLS 1.2/1.3,配置ssl_prefer_server_ciphers on、强密码套件、ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d;,并开启HSTS;按需使用OCSP Stapling提升握手与首次访问体验。
  • 网络内核参数:适度调大net.core.somaxconnnet.ipv4.ip_local_port_rangenet.core.netdev_max_backlog,缩短net.ipv4.tcp_fin_timeout,在NAT/高并发短连接场景可考虑net.ipv4.tcp_tw_reuse=1(注意不同内核版本与云厂商的安全策略差异)。
  • 日志与观测:对高QPS站点可关闭或缓冲access_log(如“access_log off;”或“access_log … buffer=16k”),将error_log设为合适级别(如notice)以减少开销;结合Prometheus/Grafana与日志分析定位瓶颈。
  • 上线流程与PHP-FPM协同:变更前先备份配置并执行nginx -t校验;无误后reload/restart;与PHP-FPM协同,启用OPcache并合理设置pm.max_children/start_servers/min_spare_servers/max_spare_servers,避免上游成为瓶颈。
  • 典型配置片段:
    server {
        listen 443 ssl http2;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_certificate /path/to/fullchain.pem;
        ssl_certificate_key /path/to/privkey.pem;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    }
    
    安全与网络优化不仅提升性能,也显著降低攻击面与握手延迟。

0