一:Nginx性能调优
1.更改进程数和连接数
(1)进程数
在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用psaux命令查看Nginx运行进程的个数。从命令执行结果可以看出masterprocess是Nginx的主进程,开启1个;workerprocess是子进程,子进程也是开启了1个。修改Nginx的配置文件的workerprocesses参数,一般设为CPU的个数或者核数,在高并发的情况下可设置为CPU个数或者核数的2倍,可以查看CPU的核数以确定参数
[root@localhost ~]# nproc
4
参数设置为4,和CPU的核数相同。运行进程数多一些,响应客户端访问请求时,Nginx就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度。
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
worker_processes 4;
修改完后,重启服务,使用psaux查看运行进程数的变化情况。从下面执行结果中可以看出开启了1个主进程和4个子进程,参数设置起到了作用。
[rootelocalhost ~]# ps -ef | grep nginx
(2)连接数
单个Worker 进程最大并发连接数
[root@localhost~ ]# vim /usr local/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
2.静态缓存功能设置
当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
(1)设置静态资源缓存
[root@localhost~ ]#vim /usr/local/nginx/conf/nginx.conf
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
root html;
expires 1d;
}
[root@localhost ~]#nginx -t
[root@localhost ~]#nginx -s reload
(2)验证静态缓存
通过浏览器查看,响应头中包含字段即为缓存成功
3.设置连接超时
- 在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout 超时时间。
[root@localhost ~]#vim /usr/local/nginx/conf/nginx.conf
http {
//省略内容
#keepalive_timeout 0;
keepalive_timeout 65 180;
//默认是 65 秒,设置超时是 180 秒
//省略内容
}
keepalive_timeout 第一个参数指定了与客户端的 keep - alive 连接超时时间,服务器将会在这个时间后关闭连接。可选的第二个参数指定了在响应头 Keep - Alive: timeout=time 中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep - Alive 响应头
4.日志切割
随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握 Nginx 的运行状态,需要时刻关注 Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
Nginx 没有类似 Apache 的 cronlog 日志分割处理功能,但是可以通过 Nginx 的信号控制功能脚本来实现日志的自动切割,并将脚本加入到 Linux 的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。下面是具体操作步骤。
(1)编写脚本
/opt/fenge.sh,把 Nginx 的日志文件 /usr/local/nginx/logs/access.log 移动到目录/var/log/nginx 下面,以当前时间做为日志文件的名称,然后用 kill -USR1 创建新的日志文 件/usr/local/nginx/logs/access.log,最后删除 30 天之前的日志文件。
[root@localhost ~]# vi /opt/fenge.sh
#!/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)执行/opt/fenge.sh,测试日志文件是否被切割
[root@localhost ~]# chmod +x /opt/fenge.sh
[root@localhost ~]# /opt/fenge.sh
[root@localhost ~]# ls /var/log/nginx
test.com-access.log-20200123
[root@localhost ]~#ls /usr/local/nginx/logs/access.log
-rw-r--r-- 1 nginx root 0 2月 15 18:57 /usr/local/nginx/logs/access.log
设置 crontab 任务,定期执行脚本自动进行日志分割。
[root@localhost ]# crontab -e
30 1 * * * /opt/fenge.sh
5.配置网页压缩
Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许 Nginx 服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认 Nginx 已经安装该模块,只需在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。
- gzip on: 开启 gzip 压缩输出;
- gzip_min_length 1k: 用于设置允许压缩的页面最小字节数;
- gzip_buffers 4 16k: 表示申请 4 个单位为 16k 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果;
- gzip_http_version 1.0: 用于设置识别 http 协议版本,默认是 1.1,目前大部分浏览器已经支持 gzip 解压,但处理较慢,也比较消耗服务器 CPU 资源;
- gzip_comp_level 2: 用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理速度最慢,使用默认即可;
- gzip_types text/plain: 压缩类型,是对哪些网页文档启用压缩功能;
- gzip_vary on: 选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面。
二:nginx的深度监控
1.GoAccess简介
GoAccess 是一个开源实时 Web 日志分析器和交互式查看器,可在 Linux 系统上的终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。
GoAccess 解析指定的 Web 日志文件并将数据输出到 X 终端。特点包括:
完全实时:所有面板和指标都定时在终端输出上每 200 毫秒更新一次,在 HTML 输出上每秒更新一次。
所需的最少配置:您只需针对访问日志文件运行它,选择日志格式,然后让 GoAccess 解析访问日志并向您显示统计信息。
跟踪应用程序响应时间:跟踪处理请求所花费的时间。如果您想跟踪减慢网站速度的页面,则非常有用。
几乎所有 Web 日志格式:GoAccess 允许任何自定义日志格式字符串。预定义选项包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。增量日志处理:需要数据持久化?GoAccess 能够通过磁盘持久性选项增量处理日志。
GoAccess 只有一个依赖项:是用 C 编写的。要运行它,您只需要 ncurses 作为依赖项。就是这样。它甚至拥有自己的 Web Socket 服务器 — Simple WebSocket Server RFC6455 compliant - GWSockethttp://gwsocket.io/
访问者:按小时或日期确定点击量、访问者、带宽和最慢运行请求的指标。每个虚拟主机的指标:拥有多个虚拟主机(服务器块)?它有一个面板,显示哪个虚拟主机消耗了大部分 Web 服务器资源。
(1)GoAccess安装
安装编译依赖
[root@localhost~ ]# dnf install -y gcc make ncurses-devel openssl-devel gettext-devel
安装中文字体支持
[root@localhost~ ]# dnf install -y wqy-microhei-fonts
源码编译安装 GoAccess
[root@localhost ~]# tar -xzvf goaccess-1.7.2.tar.gz
[root@localhost ~]# cd goaccess-1.7.2
[root@localhost ~]#./configure --enable-utf8 --with-openssl
--enable-utf8:启用 Unicode 支持(显示中文必备)。
--with-openssl:支持 HTTPS 日志分析。
[root@localhost ~]# make && make install
(2)配置中文环境
设置系统 Locale 为中文
[root@localhost ~]# dnf install -y glibc-langpack-zh
[root@localhost ~]# localectl set-locale LANG=zh_CN.UTF-8
验证 Locale 是否生效
[root@localhost~ ]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
...
(3)GoAccess生成中文报告
[root@localhost~]# goaccess --log -format=COMBINED --output=/usr/local/nginx/html/report.html --real -time-html /usr/local/nginx/logs/access.log
[PARSING /usr/local/nginx/logs/access.log] {0} @ {0/s}
WebSocket 服务器已准备接收来自客户的连接
--output=report.html:生成 HTML 报告。
--real - time - html:实时更新报告。
(4)测试访问
浏览器访问 http:// 你的 ip/report.html
2.nginx vts 简介
Nginx 的 VTS 模块(Virtual Host Traffic Status)是一个开源监控工具,用于实时收集和分析 Nginx 的流量、性能指标及状态数据。以下是其核心功能和特点:
- 实时监控:统计每个虚拟主机(server 块)的请求量(QPS)、带宽使用、响应时间、连接数等关键指标。支持按状态码(如 2xx、4xx、5xx)分类统计请求。
- 数据可视化:提供内置监控页面(默认路径 /status),通过图表和表格展示实时及历史数据。支持 JSON 格式输出,方便集成到 Prometheus、Grafana 等监控平台。
- 扩展性:通过 Lua 脚本扩展自定义监控逻辑(如记录特定 API 的响应时间)。可配置数据存储策略(如保留最近 1 小时的数据)。
- 报警集成:结合阈值规则触发告警(需配合外部工具如 Zabbix、Telegram Bot)。
(1).nginx vts 安装
[root@localhost ~]# tar xzf nginx-1.26.3.tar.gz
[root@localhost ~]# unzip nginx-module-vts-master.zip
[root@localhost ~]# cd nginx-1.26.3
[root@localhost 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
[root@localhost nginx-1.26.3~]# make && make install
(2).nginx配置开启vts
修改 nginx 配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
vhost_traffic_status_zone; # 启用流量统计共享内存区
}
Server {
location /vts {
vhost_traffic_status_display; # 启用统计展示
vhost_traffic_status_display_format html; #默认JSON可设为html
access_log off; # 关闭访问日志
}
}
[root@localhost~]#/usr/local/nginx/sbin/nginx -t
[root@localhost~]#/usr/local/nginx/sbin/nginx
(3)测试访问
浏览器访问 http:// 你的 ip/vts
总结:
本课程内容涵盖了 nginx 的性能调优与深度监控两大核心方面。通过深入学习,我们掌握了 nginx 性能调优的多种方法和技巧,包括调整工作进程数、连接处理机制、缓存配置以及压缩技术等,这些调优措施能够显著提升 nginx 的处理能力和响应速度,满足高并发场景下的性能需求。同时,我们也学会了 nginx 的深度监控技术,了解了如何利用各种监控工具和指标来实时跟踪 nginx 的运行状态、性能表现以及潜在问题。通过深度监控,我们可以及时发现并解决 nginx 运行过程中的瓶颈和问题,确保 nginx 始终保持在最佳状态。综上所述,掌握 nginx 的性能调优与深度监控技能,对于提升 Web 应用的性能、稳定性和可靠性具有重要意义