溫馨提示×

LNMP下Nginx配置優化

小樊
37
2025-10-07 12:58:24
欄目: 編程語言

LNMP環境下Nginx配置優化指南

1. 基礎配置優化

  • 工作進程與連接數
    設置worker_processesauto(自動匹配CPU核心數)或手動指定(如4核CPU設為4),充分利?CPU資源;通過worker_connections調整每個工作進程的最大連接數(如10240),需結合worker_rlimit_nofile(設置為65535以上)避免“Too many open files”錯誤。示例:

    worker_processes auto;
    events {
        worker_connections 10240;
        use epoll;  # Linux下推薦使用epoll事件模型
        multi_accept on;  # 一次接受多個新連接
    }
    
  • 高效文件傳輸
    啟用sendfile實現零拷貝傳輸,減少CPU消耗;配合tcp_nopush(僅在sendfile開啟時有效)優化數據包發送,降低網絡延遲。示例:

    http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;  # 禁用Nagle算法,減少延遲
    }
    
  • 壓縮傳輸
    啟用gzip壓縮響應數據(如文本、JSON、JS等),減少傳輸體積(通??蓧嚎s至原大小的30%-70%),提升頁面加載速度。示例:

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
    gzip_comp_level 6;  # 壓縮級別(1-9,6為平衡值)
    gzip_min_length 1024;  # 僅壓縮大于1KB的文件
    
  • 緩沖區調整
    合理設置請求體與頭的緩沖區大小,避免大請求導致的內存溢出或磁盤I/O。示例:

    client_body_buffer_size 16k;  # 請求體緩沖區
    client_header_buffer_size 1k;  # 請求頭緩沖區
    client_max_body_size 8m;  # 最大請求體大?。ㄈ缟蟼魑募拗疲?/span>
    large_client_header_buffers 4 4k;  # 大請求頭緩沖區
    
  • 日志優化
    關閉不必要的訪問日志(如靜態資源),將錯誤日志級別調整為crit(僅記錄嚴重錯誤),減少磁盤I/O。示例:

    access_log off;  # 關閉訪問日志(或指定路徑)
    error_log /var/log/nginx/error.log crit;  # 錯誤日志級別
    

2. 高級功能優化

  • 靜態資源緩存
    為靜態文件(圖片、CSS、JS等)設置瀏覽器緩存(expires)和Cache-Control頭,減少重復請求。示例:

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;  # 瀏覽器緩存30天
        add_header Cache-Control "public, no-transform";
    }
    
  • 代理緩存
    使用proxy_cache緩存后端響應(如PHP、API),降低后端服務器負載。示例:

    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_pass http://backend;
            proxy_cache_valid 200 302 10m;  # 200/302狀態碼緩存10分鐘
            proxy_cache_valid 404 1m;  # 404狀態碼緩存1分鐘
        }
    }
    
  • 負載均衡
    通過upstream模塊將請求分發到多個后端服務器,提升并發處理能力。常用算法:

    • round_robin(默認,輪詢):適合后端服務器性能相近的場景;
    • least_conn(最少連接):適合長連接場景(如上傳文件);
    • ip_hash(IP哈希):適合需要會話保持的應用(如登錄狀態)。示例:
    upstream backend {
        least_conn;  # 最少連接算法
        server 192.168.1.101:80;
        server 192.168.1.102:80;
    }
    server {
        location / {
            proxy_pass http://backend;
        }
    }
    
  • SSL/TLS優化
    啟用HTTP/2(多路復用,提升傳輸效率);優化TLS配置(使用TLS 1.3、高性能加密套件);開啟會話緩存(減少SSL握手時間)。示例:

    server {
        listen 443 ssl http2;  # 啟用HTTP/2
        ssl_protocols TLSv1.3 TLSv1.2;  # 僅使用TLS 1.3/1.2
        ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';  # 高性能加密套件
        ssl_session_cache shared:SSL:10m;  # 會話緩存
        ssl_session_timeout 10m;  # 會話超時時間
    }
    
  • 防惡意請求
    添加規則攔截常見壓力測試工具(如ApacheBench、JMeter)和惡意請求(如空格注入),保護服務器安全。示例:

    if ($http_user_agent ~* (ApacheBench|WebBench|Jmeter)) {
        return 503;  # 返回服務不可用
    }
    if ($request_uri ~ " ") {
        return 444;  # 直接關閉連接(Nginx特有狀態碼)
    }
    

3. 操作系統級優化

  • 文件描述符限制
    修改/etc/security/limits.conf,增加Nginx進程的文件描述符限制(避免高并發下“Too many open files”錯誤)。示例:

    * soft nofile 65535
    * hard nofile 65535
    
  • 網絡參數優化
    調整內核參數(如/etc/sysctl.conf),優化TCP連接處理:

    • net.core.somaxconn:增加連接隊列長度(如65535);
    • net.ipv4.tcp_max_syn_backlog:增加SYN隊列長度(如65535);
    • net.ipv4.tcp_tw_reuse:啟用TIME_WAIT連接復用(減少連接建立時間);
    • net.ipv4.tcp_fastopen:啟用TCP Fast Open(減少握手時間)。示例:
    sysctl -w net.core.somaxconn=65535
    sysctl -w net.ipv4.tcp_max_syn_backlog=65535
    sysctl -w net.ipv4.tcp_tw_reuse=1
    sysctl -w net.ipv4.tcp_fastopen=3
    
  • 硬件優化

    • 使用SSD替代HDD:提升靜態資源訪問速度(如圖片、CSS);
    • 增加內存:提升緩存能力(如proxy_cache、gzip緩存);
    • 使用多核CPU:結合worker_processesworker_cpu_affinity(將進程綁定到特定核心,減少上下文切換)。

4. 監控與調優

  • 核心監控指標
    通過nginx -t檢查配置語法;使用top、htop監控CPU使用率;通過ss -s查看連接數;通過access_log分析QPS(每秒請求數)、響應時間($request_time)、錯誤率(4xx/5xx占比)。
  • 工具推薦
    使用Prometheus+Grafana搭建Nginx監控面板,實時查看性能指標;使用ab(Apache Benchmark)、wrk進行壓力測試,模擬高并發場景。

以上優化措施需根據服務器硬件配置(CPU、內存、存儲)、業務場景(靜態/動態內容比例、并發量)進行調整,建議修改配置后通過nginx -t檢查語法,再重啟Nginx(systemctl restart nginx)使更改生效。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女