LNMP中Nginx怎样优化配置
小樊
42
2025-12-27 19:03:42
LNMP中 Nginx 优化配置要点
一 核心并发与事件模型
- 设置工作进程数与文件描述符:将worker_processes设为auto(或CPU物理核心数),提升worker_rlimit_nofile到65535以避免“Too many open files”。
- 选择高效事件模型:Linux使用use epoll;开启multi_accept on提高连接接收效率。
- 调整每进程并发:worker_connections建议从10240起步,结合内存与业务压测逐步上调;最大并发估算为worker_processes × worker_connections(反向代理场景常需再除以约4以计入连接复用与开销)。
- 开启长连接复用:在http段设置keepalive_timeout 65、keepalive_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 nginx或nginx -s reload平滑生效;生产变更前务必在测试环境验证并用top/htop、ss -tulnp及访问/错误日志持续观测。