Debian LNMP环境中Nginx配置优化指南
auto(自动匹配CPU核心数),充分利用多核CPU资源,避免进程过多导致上下文切换开销。1024及以上(如4096),需结合worker_rlimit_nofile(文件描述符限制)调整,确保两者匹配(如worker_rlimit_nofile 65535)。nginx.conf的events段中添加上述参数,提升并发处理能力。sendfile on; 开启零拷贝传输,减少文件从磁盘到网卡的上下文切换,提升静态资源(如图片、CSS)传输效率。tcp_nopush on; 配合sendfile使用,优化数据包发送;tcp_nodelay on; 禁用Nagle算法,降低延迟(适合实时应用)。client_body_buffer_size 16k;(请求体缓冲区)、client_header_buffer_size 1k;(请求头缓冲区)、large_client_header_buffers 4 4k;(大请求头缓冲区,最多4个,每个4k)。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public, no-transform";
}
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分钟
}
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡值)
gzip_min_length 1024; # 只压缩大于1KB的文件
listen 443 ssl http2;ssl_protocols TLSv1.3;)、高性能加密套件(如ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384;),并开启会话缓存(ssl_session_cache shared:SSL:10m;、ssl_session_timeout 10m;)减少握手时间。access_log off;)或降低日志级别(error_log /var/log/nginx/error.log crit;),减少I/O开销(生产环境建议保留错误日志)。server_tokens off; 关闭Nginx版本号,减少信息泄露风险。.htaccess文件:location ~ /\.ht { deny all; };或通过allow/deny限制IP访问后台:location /admin {
allow 192.168.1.0/24;
deny all;
}
upstream backend {
least_conn; # 最少连接算法(适合长连接场景)
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
/etc/security/limits.conf,增加Nginx进程的文件描述符限制(避免“Too many open files”错误):* soft nofile 65535
* hard nofile 65535
sysctl命令优化TCP连接处理,例如:sysctl -w net.core.somaxconn=65535 # 最大连接队列长度
sysctl -w net.ipv4.tcp_max_syn_backlog=65535 # SYN队列长度
sysctl -w net.ipv4.tcp_tw_reuse=1 # 加速TIME_WAIT连接回收
sysctl -w net.ipv4.tcp_fin_timeout=30 # TIME_WAIT超时时间(秒)
将上述配置写入/etc/sysctl.conf并执行sysctl -p使其生效。