centos lnmp如何优化Nginx
导读:CentOS LNMP 环境下 Nginx 优化实战 一 系统与环境准备 升级与安装:保持系统组件为较新版本,安装 Nginx 与 PHP-FPM,并设置为开机自启,确保基础运行环境稳定。 运行用户与权限:建议使用专用低权限用户运行 Ng...
CentOS LNMP 环境下 Nginx 优化实战
一 系统与环境准备
- 升级与安装:保持系统组件为较新版本,安装 Nginx 与 PHP-FPM,并设置为开机自启,确保基础运行环境稳定。
- 运行用户与权限:建议使用专用低权限用户运行 Nginx(如 nginx),在编译安装或配置文件中显式指定,降低安全风险。
- 资源与存储:优先使用 SSD 存储、合理规划内存与 CPU 资源,为后续高并发打底。
二 核心参数优化
- 进程与连接
- 设置 worker_processes auto; (通常等于 CPU 逻辑核心数),必要时使用 worker_cpu_affinity 做核心绑定以减少缓存失效与上下文切换。
- 提升 worker_connections(如 10240 或更高),并配套提高 worker_rlimit_nofile(如 200000),确保单 worker 与系统级文件描述符上限充足;最大并发能力≈worker_processes×worker_connections。
- 事件模型与网络
- Linux 下使用 use epoll; 与 multi_accept on; 提升新连接接纳效率。
- 启用 sendfile on; 、tcp_nopush on; 、tcp_nodelay on; 降低系统调用与网络小包延迟,提高静态资源与大流量的吞吐。
- 长连接与超时
- 面向客户端:将 keepalive_timeout 设为 15–30s(API/网关可更短),keepalive_requests 提升到 10000 以充分复用连接。
- 面向后端(反向代理/负载均衡):开启 proxy_buffering on; ,设置 proxy_buffer_size 16k; proxy_buffers 1024 16k; ,并在 upstream 上配置 keepalive 100; ;同时设置 proxy_http_version 1.1; proxy_set_header Connection “”; 以复用后端连接。
- 监听队列
- 在 server 或 listen 指令中提高 backlog(如 65535),缓解突发连接排队,但需与系统内核参数协同。
三 静态资源与压缩缓存
- 启用压缩:开启 gzip on; ,并设置合适的 gzip_types(如 text/plain、text/css、application/javascript、application/json 等),减少传输体积、加速首屏。
- 访问日志优化:非关键场景可关闭 access_log;或启用缓冲写入(如 buffer=64k flush=1m),降低磁盘 I/O 抖动。
- 静态资源缓存:对图片、字体、CSS/JS 等设置长期 expires(如 1d 或更长),减少重复请求与回源。
- 打开文件缓存:启用 open_file_cache(如 max=1024 inactive=10s; valid=60s; min_uses=2; errors on; ),缓存频繁访问的文件元数据与描述符,降低系统调用开销。
四 安全与运维实践
- 隐藏版本与基础安全:在 http 块设置 server_tokens off; 减少信息泄露;按需配置安全响应头(如 X-Frame-Options、X-Content-Type-Options 等)。
- 日志切割与保留:通过脚本每日轮转 access/error 日志,并定期清理历史文件(如保留 30 天),避免磁盘被占满影响稳定性。
- 压测与灰度:以 JMeter 等工具建立基准,按“单参数调整—压测—对比”的闭环验证效果;将验证通过的配置灰度上线并持续监控。
- 监控与告警:结合 Prometheus + Grafana 等监控平台观察 QPS、P95/P99 延迟、连接数、带宽、错误率 等关键指标,及时发现异常。
五 可直接使用的配置片段
# 进程与连接
worker_processes auto;
worker_rlimit_nofile 200000;
events {
use epoll;
multi_accept on;
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
# 高效传输
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 日志:按需关闭或缓冲
access_log off;
# access_log /var/log/nginx/access.log main buffer=64k flush=1m;
error_log /var/log/nginx/error.log warn;
# 压缩
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_types text/plain text/css application/javascript application/json application/xml;
gzip_disable "MSIE [1-6]\.";
# 静态资源长期缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1d;
add_header Cache-Control "public, immutable";
}
# 打开文件缓存
open_file_cache max=1024 inactive=10s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 长连接(客户端)
keepalive_timeout 15;
keepalive_requests 10000;
# 反向代理示例(可按需调整)
upstream backend {
server 127.0.0.1:8080;
keepalive 100;
}
server {
listen 80 backlog=65535;
server_name _;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 1024 16k;
}
}
}
应用前执行语法检查与热加载:
- 检查:nginx -t
- 生效:nginx -s reload
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp如何优化Nginx
本文地址: https://pptw.com/jishu/774677.html
