目录
一,Nginx性能调优
1,更改进程数与连接数
在高并发环境中,需要启动更多的 Nginx 进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用psaux命令查看Nginx 运行进程的个数。
[root@localhost conf]# ps -ef |grep nginx
root 1808 1 0 10:13 ? 00:00:00 nginx: master process nginx
nginx 1809 1808 0 10:13 ? 00:00:00 nginx: worker process
从命令执行结果可以看出 master process 是 Nginx 的主进程,开启1个;workerprocess 是子进程,子进程也是开启了1个。修改 Nginx 的配置文件的 worker _processes 参数,一般设为CPU 的个数或者核数。
##默认进程/连接数
worker_processes 1;
worker_connections 1024;
##修改进程数
worker_processes 4; ##进程数
worker_connections 4096; ##连接数
[root@localhost conf]# ps -ef | grep nginx ##修改完成后进行验证测试
root 1808 1 0 10:13 ? 00:00:00 nginx: master process nginx
nginx 1883 1808 0 10:36 ? 00:00:00 nginx: worker process
nginx 1884 1808 0 10:36 ? 00:00:00 nginx: worker process
nginx 1885 1808 0 10:36 ? 00:00:00 nginx: worker process
nginx 1886 1808 0 10:36 ? 00:00:00 nginx: worker process
2,静态缓存功能设置
当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
#编辑用于测试的网站(前提准备一张图片)
[root@localhost html]#vim /usr/local/nginx/html/aaa.html
<html>
<body>
<h1>111 It work!
<img src="111.png"/>
</h1>
</body>
</html>
##编辑nginx的配置文件
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
#在location添加以下内容
location ~ \.(gif|jpg|jpeg|png|bmp)$ {
root html;
expires 1d;
}
[root@localhost html]# nginx -t ##检查配置文件并重载
[root@localhost html]# nginx -s reload
通过浏览器查看,响应头中包含字段(Expires)即为缓存成功
3,设置连接超时
在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件nginx.conf,设置 keepalive timeout 超时时间。
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65 120;
##keepalive_timeout 第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。
##可选的第二个参数指定了在响应头Keep-Alive:timeout=time 中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx不会发送Keep-Alive 响应头。
##通过此命令可以查看用户与服务器的连接状态
[root@localhost nginx-1.24.0]# ss -antp |grep nginx
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2137,fd=6),("nginx",pid=1808,fd=6))
ESTAB 0 0 192.168.10.102:80 192.168.10.1:60185 users:(("nginx",pid=2137,fd=3))
ESTAB 0 0 192.168.10.102:80 192.168.10.1:60165 users:(("nginx",pid=2137,fd=4))
4,Nginx日志切割
随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握 Nginx 的运行状态,需要时刻关注 Nginx日志文件。太大的日志文件对监控是个大灾难,不便于分析排查,需要定期的进行日志文件的切割。Nginx 没有类似 Apache 的 cronlog 日志分割处理功能,但是可以通过 Nginx 的信号控制功能脚本来实现日志的自动切割,并将脚本加入到 Linux 的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。
[root@localhost ~]# vim aaa.sh #编辑一个用于分割日志的脚本文件
[root@localhost ~]# chmod +x aaa.sh #授予执行的权限
#!/bin/bash
d=$(date -d "-1 day" "+Y%%m%d") #显示时间
logs_path="/var/log/nginx" #定义存放日志的文件的变量
pid_path="/usr/local/nginx/logs/nginx.pid" #指定nginx的pid
[ -d $logs_path ] || mkdir -p $logs_path #判断存放日志文件是否存在,否则创建
mv /usr/local/nginx/logs/access.log $logs_path/access.log-$d #将nignx的日志移动到指定位>置并重命名
kill -USR1 $(cat $pid_path) #重新生成日志文件
find $logs_path -mtime +30 | xargs rm -rf #删除30天之前的日志文件
对脚本进行测试,测试日志文件是否被切割
[root@localhost ~]# bash aaa.sh
[root@localhost ~]# cd /var/log/nginx
[root@localhost nginx]# ls ##可以看到指定目录有日志文件
access.log-20250428
##设置crontab任务,每天晚上12点执行脚本自动进行日志分割
[root@localhost /]# crontab -e
0 12 * * * bash /root/aaa.sh
5,配置网页压缩
Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认Nginx已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。
##修改nginx的配置文件,加入压缩功能参数
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
gzip on;
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_min_length 1k;
gzip_vary on;
gzip_types test/plain test/javascript application/x-javascript test/css test/xml; #压缩类型,对哪些网页文档启用压缩功能
压缩功能参数详细解释:
- gzip on; #开启gzip压缩输出
- gzip_buffers 4 64k; #表示4个单位为64k的内容作为压缩结果缓存
- gzip_http_version 1.1; #设置识别http协议版本,默认1.1
- gzip_comp_level 3; #用来指定gzip压缩比,数字越大传输速度快但处理速度慢
- gzip_min_length 1k; #设置允许压缩的页面最小字节数
- gzip_vary on; #让前端的服务器缓存经过gzip压缩的页面
- gzip_types test/plain test/javascript application/x-javascript test/css test/xml; #压缩类型,对哪些网页文档启用压缩功能
二,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 只有一个依赖项:是用℃ 编写的。要运行它,您只需要 ncurses 作为依赖项。就是这样。它甚至拥有自己的 Web Socket 服务器-http://gwsocket.io/.
- 无需数据库:直接解析日志文件,不依赖外部数据库,部署简单。
- 开源免费:MIT 许可证,可自由使用和修改。
coaccess的缺点:
- 功能相对基础相比商业工具(如 Splunk、ELK),高级功能(如机器学习、复杂关联分析)较弱。
- 可视化较简单HTML 报告美观度一般,缺乏交互式图表(如动态筛选、钻取分析)。
- 无长期存储默认不存储历史日志数据,需自行归档或结合其他工具(如日志轮转 + 备份)。
- 复杂查询受限不支持类似 SQL 的复杂查询语法,过滤和分析能力有限。
- 依赖日志文件需直接访问日志文件,对云端或无服务器架构(如 AWS Lambda)的支持较弱。
- 学习成本高级配置(如自定义日志格式、正则表达式)需要一定学习成本。
- 无告警功能不支持基于阈值的实时告警(需配合脚本或其他监控工具实现)
2,goaccess的安装及使用
##安装goaccess所需的软件包
[root@localhost ~]# dnf -y install make ncurses-devel openssl-devel gettext-devel
##安装中文字体支持
[root@localhost ~]# dnf -y install wqy-microhei-fonts
##解压goaccess压缩包
[root@localhost ~]# tar zxvf goaccess-1.7.2.tar.gz
##编译安装goaccess
[root@localhost goaccess-1.7.2]# ./configure --enable-utf8 --with-openssl && make && make install
设置系统locale为中文
[root@localhost /]# dnf install -y glibc-langpack-zh
[root@localhost /]# localectl set-locale LANG=zh_CN.UTF-8
[root@localhost /]# locale ##验证locale是否生效
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
.....//省略部分内容
##goaccess生成中文报告
[root@localhost /]# goaccess --log-format=COMBINED --output=/usr/local/nginx/html/report.html --real-time-html /usr/local/nginx/logs/access.log
浏览器输入http://主机IP地址/report.html进行访问测试(前提nginx必须启动)
3,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 src]# ls
debug kernels nginx-1.24.0 nginx-1.24.0.tar.gz nginx-module-vts-master.zip
[root@localhost src]# unzip nginx-module-vts-master.zip
##切换到nginx文件的目录 ,重新编译安装
[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 --with-stream_ssl_module --with-stream_realip_module --add-module=./ngx_http_proxy_connect_module --add-module=/usr/src/nginx-module-vts-master
2,修改nginx配置文件,在nginx中开启vts
http{
vhost_traffic_status_zone; ##启用流量统计共享内存区
server{
location /vts {
vhost_traffic_status_display; ##启用统计展示
vhost_traffic_status_display_format html; ##默认为SON设置问html
access_log off; ##关闭访问日志
}
[root@localhost src]# pkill -9 nginx ##杀死nginx进程
[root@localhost src]# nginx ##重新启动nginx
3,测试访问
浏览器输入http://主机ip地址/vts