Nginx 性能调优与深度监控
目录
一、Nginx 性能调优
1. 更改进程数与连接数
(1)进程数
(2)连接数
2. 静态缓存功能设置
(1)设置静态资源缓存
(2)验证静态缓存
3. 设置连接超时
4. 日志切割
5. 配置网页压缩
总结
二、nginx 的深度监控
1. GoAccess 简介
(1)GoAccess 安装
(2)配置中文环境
(3)GoAccess 生成中文报告
(4)测试访问
2. nginx vts 简介
(1)概述
(2)核心功能和特点
(3)nginx vts 安装
(4)nginx 配置开启 vts
(5)测试访问
一、Nginx 性能调优
1. 更改进程数与连接数
(1)进程数
-
作用:Nginx 使用多进程模型处理请求,合理配置进程数可充分利用 CPU 资源。
-
配置方法:
vim /usr/local/nginx/conf/nginx.conf # 主配置文件 nginx.conf worker_processes auto; # 自动设置为 CPU 核心数 # 也可以查看CPU核数来决定参数(通过nproc命令查看),参数一般设置为CPU的个数或是核数的2倍。#重启服务 nginx -s reload
(2)连接数
-
作用:控制每个 Worker 进程能处理的并发连接数。
-
配置方法:
events { worker_connections 10240; # 每个 Worker 最大连接数 multi_accept on; # 一次性接受所有新连接 use epoll; # 使用高效事件模型(Linux 推荐) }
- 系统级连接数限制:
# 临时修改 ulimit -n 65535 # 永久修改(/etc/security/limits.conf) * soft nofile 65535 * hard nofile 65535
-
最大并发量公式:
最大并发 = worker_processes × worker_connections
2. 静态缓存功能设置
(1)设置静态资源缓存
通过缓存静态文件(如图片、CSS、JS)减少磁盘 I/O 和重复请求处理。
# 设置配置文件 server { location ~* \.(jpg|png|css|js)$ { root html;expires 1d; #设置过期时间为1天} } # 重启
(2)验证静态缓存
方法一:
- 通过浏览器查看,按F12 开发者模式,看响应头是否包含字段
方法二:
查看响应头:
curl -I http://example.com/image.jpg # 输出示例: # X-Cache-Status: HIT检查缓存目录:
ls /var/cache/nginx
3. 设置连接超时
优化连接超时参数,释放闲置资源,防止连接耗尽。
http { # 客户端连接超时 client_header_timeout 15s; # 请求头读取超时 client_body_timeout 30s; # 请求体读取超时 send_timeout 60s; # 响应发送超时 # Keepalive 长连接 keepalive_timeout 75s; # 保持连接的超时时间 keepalive_requests 100; # 单个连接最大请求数
}
4. 日志切割
通过日志切割避免单个日志文件过大,便于管理和分析。
(1)编写脚本
#shell编写脚本,把日志文件到/var/log/nginx下;然后创建新的日志文件#!/bin/bash
# Filename: fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") #获取当前日期的前一天,并以年、月、日连写的格式输出
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
#创建日志文件目录mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d
#移动并重命名日志文件kill -USR1 $(cat $pid_path)
#重建新日志文件find $logs_path -mtime +30 |xargs rm -rf
#删除30天之前的日志文件
(2)执行脚本并测试日志文件是否被切割
[root@localhost ~]# chmod +x /opt/fenge.sh
[root@localhost ~]# /opt/fenge.sh
[root@localhost ~]# ls /var/log/nginx/
test.com-access.log-20250428
[root@localhost ~]# ls /usr/local/nginx/logs/access.log
/usr/local/nginx/logs/access.log
[root@localhost ~]# ls -ll /usr/local/nginx/logs/access.log
-rw-r--r--. 1 nginx root 0 4月29日 11:51 /usr/local/nginx/logs/access.log
设置crontab 计划任务,定期自动脚本进行日志分割
[root@localhost ~]# crontab -e
30 1 * * * /opt/fenge.sh
5. 配置网页压缩
启用 Gzip 压缩,减少传输数据量,提升加载速度。
http { gzip on; #取消注释gzip_buffers 4 64k; # gzip 压缩时的缓冲区gzip_http_version 1.1; #设置相关的 HTTP 协议版本为gzip_comp_level 2; # 压缩级别(1-9,越高 CPU 消耗越大) gzip_min_length 1k; # 最小压缩文件大小 gzip_vary on; # 根据客户端支持情况动态启用压缩 gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; #一系列的 MIME 类型
总结
调优项 | 核心配置 | 性能影响 |
---|---|---|
进程与连接数 | worker_processes , worker_connections | 提升并发处理能力 |
静态缓存 | proxy_cache_path , expires | 减少磁盘 I/O,加速静态资源响应 |
连接超时 | keepalive_timeout , client_*_timeout | 释放闲置连接,防止资源耗尽 |
日志切割 | logrotate 定时任务 | 管理日志体积,避免存储压力 |
网页压缩 | gzip on , gzip_types | 减少传输数据量,提升加载速度 |
二、nginx 的深度监控
1. GoAccess 简介
GoAccess 是一款开源的 实时 Web 日志分析工具,支持生成交互式 HTML 报告、命令行报表,能快速分析 Nginx、Apache 等日志,直观展示访问量、访客来源、请求路径等关键指标。
(1)GoAccess 安装
#安装编译依赖
dnf install -y gcc make ncurses-devel openssl-devel gettext-devel解析:“ncurses-devel” 是与 ncurses 库开发相关的软件包,ncurses 库常用于创建字符终端的文本用户界面。“openssl-devel” 与 OpenSSL 库开发相关,OpenSSL 是一个开源的安全套接字层密码库,用于实现网络通信的安全加密等功能。“gettext-devel” 与 gettext 工具开发有关,gettext 用于软件的国际化与本地化,方便软件支持多种语言。#安装中文字体支持
dnf install -y wqy-microhei-fonts#源码编译安装GOAccess
wget https://tar.goaccess.io/goaccess-1.7.2.tar.gz
tar -xzvf goaccess-1.7.2.tar.gz
cd goaccess-1.7.2/
./configure --enable-utf8 --with-openssl
make && make install 解释:“--enable-utf8” 用于启用对 UTF - 8 编码的支持
“with-openssl” 表示在软件编译或配置过程中,使用 OpenSSL 库
(2)配置中文环境(LANG=zh_CN.UTF-8)
locale //查看当前环境是否为中文
#设置系统Locale为中文
dnf install -y glibc-langack-zh
localectl set-locale LANG=zh_CN.UTF-8locale ##看是否生效
(3)GoAccess 生成中文报告
goaccess --log-format=COMBINED --output=/usr/local/nginx/html/report.html --real-time-html /usr/local/nginx/logs/access.log
参数说明:
-
--log-format=COMBINED
:匹配 Nginx 的默认日志格式。 -
--output
:输出 HTML 报告路径。 -
--real-time-html
:启用实时更新功能。
(4)测试访问
浏览器访问http://IP/report.html
2. nginx vts 简介
(1)概述
Nginx VTS 是一个第三方模块,用于监控 虚拟主机(Server Block)的流量状态,提供详细的请求数、响应时间、流量统计等数据,支持 Prometheus 格式导出。
(2)核心功能和特点
-
按虚拟主机统计:区分不同域名的流量与请求指标。
-
实时监控:动态更新请求数、响应状态码分布、流量速率。
-
Prometheus 集成:支持
/status/format/prometheus
端点导出数据。 -
低性能开销:轻量级模块设计,对服务器性能影响极小。
(3)nginx vts 安装
#原本安装过nginx,只需重新编译
tar xzf nginx-1.26.3.tar.gz
unzip nginx-module-vts-master.zip
cd nginx-1.26.3./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --add-module=/root/nginx-module-vts-mastermake && make install
(4)nginx 配置开启 vts
#修改nginx配置文件
http { vhost_traffic_status_zone; # 启用 VTS 模块 server { listen 80; server_name example.com; # VTS 监控页面(需限制访问权限) location /vts { vhost_traffic_status_display; #启用统计展示vhost_traffic_status_display_format html; #默认SON可设为HTMLaccess_log off; #关闭访问日志 deny all; } # Prometheus 格式数据导出 location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format prometheus; allow 127.0.0.1; deny all; } }
} ##重启
nginx -s reload
(5)测试访问
浏览器访问http://你的IP/vts
总结与对比
工具 | 核心功能 | 适用场景 |
---|---|---|
GoAccess | 日志分析与实时报告 | 历史访问统计、用户行为分析 |
Nginx VTS | 实时流量监控与指标导出 | 性能调优、异常流量检测、Prometheus 集成 |