温馨提示×

怎样提高Nginx在CentOS的稳定性

小樊
33
2025-12-23 13:21:43
栏目: 智能运维

提升 Nginx 在 CentOS 的稳定性

一 运行环境与资源限制

  • 以系统服务方式运行并开机自启,使用官方或系统仓库的 Nginx 包,便于获得稳定更新与标准路径(如配置文件 /etc/nginx/nginx.conf、日志 /var/log/nginx)。部署后执行一次配置语法检查:nginx -t,确保变更安全生效。
  • 提升文件描述符与进程数限制:在 /etc/security/limits.conf 为运行 Nginx 的用户(如 nginx)设置 nofile 65535,并在 systemd 服务单元中同步设置 LimitNOFILE=65535,避免运行中“打开文件过多”。
  • 计算并控制并发上限:最大并发连接数≈worker_processes × worker_connections;据此规划内存与网络栈,避免过载。
  • 建议将 worker_processes 设为 CPU 核心数(或 auto),并为每个 worker 绑定 CPU 亲和性(如 4 核使用 0001 0010 0100 1000),减少上下文切换抖动。

二 Nginx 关键配置建议

  • 进程与事件模型
    • 设置:worker_processes auto/核心数;events { use epoll; worker_connections 合理的上限(如 16384/32768);multi_accept on; accept_mutex on; }。
    • 目的:利用 epoll 高效事件驱动,减少锁争用与唤醒风暴,提升长稳运行下的吞吐与延迟稳定性。
  • 连接与超时
    • 建议:keepalive_timeout 60 15;keepalive_requests 1000;client_header_timeout 15;client_body_timeout 15;send_timeout 15;reset_timedout_connection on;tcp_nodelay on。
    • 目的:快速回收异常/慢速客户端,释放连接与内存,避免雪崩与资源被长时间占用。
  • 文件与传输优化
    • 建议:worker_rlimit_nofile 65535;open_file_cache max=102400 inactive=20s valid=30s min_uses=1;sendfile on;tcp_nopush on。
    • 目的:降低文件句柄与元数据抖动,提升静态资源与代理吞吐的稳定性。
  • 安全与可控性
    • 建议:server_tokens off;client_max_body_size 10m(按业务调整);静态资源设置长期 Cache-Control/Expires(如图片 1d)。
    • 目的:减少信息暴露与误用,控制请求体大小,降低后端与带宽压力。

三 内核与网络栈优化

  • 文件句柄与本地端口
    • fs.file-max:提升至 999999 级别(按内存与业务评估);net.ipv4.ip_local_port_range:1024 65530
  • TIME_WAIT 与连接复用
    • net.ipv4.tcp_max_tw_buckets:6000–18000(视并发与端口占用调优);net.ipv4.tcp_tw_reuse:1;net.ipv4.tcp_tw_recycle:0(在 NAT/负载均衡 场景禁用,避免连接异常);net.ipv4.tcp_keepalive_time:30;net.ipv4.tcp_keepalive_intvl:5–15;net.ipv4.tcp_keepalive_probes:3–5
  • 其他稳定性相关
    • net.core.somaxconn:65535;net.core.netdev_max_backlog:5000+;net.ipv4.tcp_max_syn_backlog:16384;net.ipv4.tcp_syn_retries:3;net.ipv4.tcp_fin_timeout:30
  • 生效方式:写入 /etc/sysctl.conf 后执行 sysctl -p;对运行中的服务,必要时配合优雅重启(reload)。

四 日志、监控与高可用

  • 日志与诊断
    • 使用 logrotate 或脚本按日切割访问/错误日志,避免单文件过大影响分析与轮转;保留 30 天 通常足够。
    • 按需结构化日志(如 JSON)便于接入 ELK,快速定位 5xx/超时/慢请求。
  • 运行监控
    • 打开 stub_status(/nginx_status)获取 Active/Reading/Writing/Waiting 等关键指标;结合 Prometheus + nginx-exporterGrafana 设置告警(如 5xx 突增、连接数逼近上限、P95 延迟异常)。
  • 高可用与扩展
    • 多实例前置 L4/L7 负载均衡(如 Keepalived + VIP 或云 LB),后端应用层无状态化,支持滚动升级与故障切换,提升整体稳定性与可维护性。

五 快速检查清单

维度 关键项 建议值或动作
进程与 CPU worker_processes / affinity 设为 CPU 核心数;绑定亲和性掩码
并发能力 worker_connections 结合内存与业务,常见 16384–32768
文件句柄 nofile / rlimit_nofile 系统 999999;进程 65535;服务单元同步
连接复用 keepalive_timeout / requests 60 15 / 1000
超时控制 header/body/send 15s / 15s / 15s
TIME_WAIT tw_reuse / tw_recycle / buckets 1 / 0 / 6k–18k
本地端口 ip_local_port_range 1024–65530
传输优化 sendfile / tcp_nopush / nodelay on / on / on
安全加固 server_tokens / client_max_body_size off / 10m
日志与监控 切割 / 结构化 / 指标与告警 logrotate / JSON / stub_status + Exporter

0