插件窝 干货文章 如何在LNMP中优化Nginx配置

如何在LNMP中优化Nginx配置

Nginx 优化 配置 fastcgi 651    来源:    2025-05-04

LNMP环境中Nginx配置优化指南

作为IT工程师,我将为您提供一套全面的Nginx配置优化方案,适用于LNMP(Linux, Nginx, MySQL, PHP)环境。

1. 基础性能优化

1.1 工作进程配置

worker_processes auto;  # 自动设置为CPU核心数
worker_cpu_affinity auto;  # 自动绑定CPU核心(仅Linux)
worker_rlimit_nofile 65535;  # 每个worker能打开的文件描述符数量

1.2 事件模型优化

events {
    worker_connections 10240;  # 每个worker的最大连接数
    use epoll;  # Linux下高性能事件模型
    multi_accept on;  # 一次接受多个连接
}

2. HTTP核心优化

2.1 高效传输设置

http {
    sendfile on;  # 启用高效文件传输
    tcp_nopush on;  # 仅在sendfile开启时有效
    tcp_nodelay on;  # 禁用Nagle算法

    keepalive_timeout 65;  # 保持连接超时
    keepalive_requests 1000;  # 单个连接最大请求数

    server_tokens off;  # 隐藏Nginx版本信息
}

2.2 缓冲区优化

http {
    client_body_buffer_size 128k;
    client_header_buffer_size 16k;
    client_max_body_size 20m;  # 最大上传文件大小
    large_client_header_buffers 4 32k;
}

3. 静态资源优化

3.1 静态文件缓存

server {
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
        expires 365d;
        access_log off;
        add_header Cache-Control "public, no-transform";
    }
}

3.2 Gzip压缩

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024;
gzip_buffers 16 8k;

4. PHP-FPM优化配置

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # 根据实际PHP版本修改
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;

    fastcgi_read_timeout 300;  # PHP脚本执行超时时间
}

5. 安全加固配置

5.1 基础安全

server {
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    add_header Referrer-Policy "strict-origin-when-cross-origin";

    # 禁止访问敏感文件
    location ~ /\.(ht|git|svn) {
        deny all;
    }
}

5.2 SSL优化(如启用HTTPS)

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

6. 日志优化

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for" '
                   '$request_time $upstream_response_time';

    access_log /var/log/nginx/access.log main buffer=32k flush=5m;
    error_log /var/log/nginx/error.log warn;

    open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
}

7. 高级优化技巧

7.1 负载均衡配置(如有多台后端)

upstream php_servers {
    least_conn;  # 最少连接算法
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    keepalive 32;  # 保持连接池大小
}

7.2 微缓存(适用于高流量站点)

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g use_temp_path=off;

server {
    location / {
        proxy_cache STATIC;
        proxy_cache_valid 200 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_lock on;
    }
}

实施建议

  1. 每次修改配置后,使用 nginx -t 测试配置语法
  2. 逐步应用优化,每次修改后监控性能变化
  3. 使用工具如 ab, wrkjmeter 进行压力测试
  4. 监控系统资源使用情况(CPU, 内存, I/O)
  5. 根据实际业务需求调整参数

这些优化配置需要根据您的具体服务器硬件配置和网站特性进行调整,建议在测试环境验证后再应用到生产环境。