目录
一、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-8
locale ##看是否生效
(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-master
make && 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可设为HTML
access_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 集成 |