nginx性能调优与深度监控

发布于:2025-05-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

掌握nginx的性能调优

掌握nginx的深度监控

一nginx性能调优

1.编译安装nginx

(1)安装支持

(2)创建运行用户,组和日志目录

(3)添加nginx系统服务

2.修改用户与组

Nginx 运行时进程需要有用户与组的支持,用以实现对网站文件读取时进行访问控制。主进程由root 创建,子进程由指定的用户与组创建。Nginx 默认使用nobody 用户帐号与组帐号,一般也要进行修改。修改Nginx 用户与组有两种方法,一种是在编译安装时指定用户与组,另一种是修改配置文件指定用户与组。

编译 Nginx 时指定用户与组,就是配置 Nginx 时,在./configure 后面指定用户与组的参数

修改nginx配置文件nginx。conf指定用户与组

3.更改进程数与连接数

在高并发环境中,需要启动更多的Nginx 进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用ps aux 命令查看 Nginx 运行进程的个数。从命令执行结果可以看出 master process 是Nginx 的主进程,开启1个;workerprocess 是子进程,子进程也是开启了1个。修改Nginx 的配置文件的 worker_processes 参数,一般设为CPU的个数或者核数,在高并发的情况下可设置为CPU 个数或者核数的2倍,可以查看CPU 的核数以确定参数

参数设置为 4,和CPU 的核数相同。运行进程数多一些,响应客户端访问请求时,Nginx 就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度。

修改完后,重启服务,使用ps aux 查看运行进程数的变化情况。从下面执行结果中可以看出开启了1个主进程和4个子进程,参数设置起到了作用。

默认情况下,Nginx 的多个进程可能更多的跑在一颗CPU上。为了充分利用硬件多核多 CPU,可以分配不同的进程给不同的CPU处理。在一台 4核 CPU服务器上,可以设置每个进程分别由不同的CPU 核心处理,达到CPU的性能最大化。

(2)连接数

单个Worker 进程最大并发连接数

所以nginx的总并发数计算:总并发数= worker_processes×worker_connections

4.静态缓存功能设置

当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。

(1)设置静态资源缓存

5.设置连接超时

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout 超时时间。

keepalive_timeout
第一个参数指定了与客户端的keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。
可选的第二个参数指定了在响应头 Keep-Alive:timeout=time中的time 值。
这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有
这个参数,Nginx不会发送 Keep-Alive 响应头。

6.日志切割

随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握 Nginx 的运行状态,需要时刻关注Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。Nginx 没有类似 Apache 的 cronlog 日志分割处理功能,但是可以通过 Nginx 的信号控制功能脚本来实现日志的自动切割,并将脚本加入到Linux 的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。下面是具体操作步骤。

(1)编写脚本
/opt/fenge.sh,把Nginx 的日志文件/usr/local/nginx/logs/access.log 移动到目录/var/log/nginx 下面,以当前时间做为日志文件的名称,然后用kil1 -USR1 创建新的日件/usr/local/nginx/logs/access.log,最后删除 30 天之前的日志文件。

(2)执行、opt/fenge.sh 测试日志文件是否被切割

设置crontab任务,定期执行脚本自动进行日志分割

即每天的冷晨1:30 分执行、opt/fenge.sh脚本,进行日志分割

7.配置网页压缩

Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认Nginx 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。

gzipon:开启 gzip 压缩输出;
gzip_min_length1k:用于设置允许压缩的页面最小字节数;
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 的配置文件,加入压缩功能参数

gzip on ;: 开启 Gzip 压缩功能。
gzip_buffers 4 64k ;: 设置用于压缩响应的缓冲区数量和大小,这里表示
分配 4个64KB 的缓冲区。
gzip_http_version 1.1 ;: 指定启用 Gzip 压缩的 HTTP 协议版本,这里是
HTTP 1.1。
gzip_comp_level 2 ;: 设置 Gzip 压缩的级别,范围是1到9,2 表示相
对较低的压缩级别(压缩速度快,压缩比相对低)。
gzip_min_length 1k ;: 指定当响应内容长度大于等于 1KB时才进行 Gzip
压缩。
gzip_vary on ;: 向代理服务器发送 Vary:Accept-Encoding 头信息,让代
理服务器根据客户端的 Accept-Encoding 头来决定是否缓存压缩后的内容
gzip_types text/plain text/javascript application/x-javascript te
xt/css text/xml application/xml application/xml+rss ;: 指定对哪些 M
IME 类型的内容进行 Gzip 压缩。

在 Nginx 工作目录建立一个超过 1K 大小的html 文件,然后使用浏览器访问网址验证,显示使用 gzip进行了压缩,如图所示。

-l:该参数的作用是只获取服务器返回的HTTP头部信息,而不获取响应的主体内容
-H:此参数用于在请求中添加自定义的HTTP头部信息。在这个例子里,添加的头部
信息是Accept-Encoding: gzip,这表示客户端(也就是发起请求的一方)支持gzip压缩
格式的响应内容。

二 nginx的深度监控

1.GoAccess 简介

GoAccess 是一个开源实时上的 终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的HTTP统计信息。

GoAccess 解析指定的Web日志文件并将数据输出到X终端。特点包括:完全实时:所有面板和指标都定时在终端输出上每200 毫秒更新一次,在HTML 输出上每秒更新一次。

所需的最少配置:您只需针对访问日志文件运行它,选择日志格式,然后让GoAccess 解析访问日志并向您显示统计信息。

跟踪应用程序响应时间:跟踪处理请求所花费的时间。如果您想跟踪减慢网站速度的页面,则非常有用。

几乎所有 Web 日志格式:GoAccess 允许任何自定义日志格式字符串。预定义选项包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。增量日志处理:需要数据持久化?GoAccess 能够通过磁盘持久性选项增量处理日志。

GoAccess 只有一个依赖项:是用C编写的。要运行它,您只需要ncurses 作为依赖项。就是这样。它甚至拥有自己的 Web Socket 服务器 - http://gwsocket. io/o

访问者:按小时或日期确定点击量、访问者、带宽和最慢运行请求的指标。每个虚拟主机的指标:拥有多个虚拟主机(服务器块)?它有一个面板,显示哪个虚拟主机消耗了大部分 Web 服务器资源。

(1)goaccess安装

编译安装goaccess

--enable-ytf8 启用unicode支持(显示中文必备)

--with-openssl 支持https日志分析

(2)配置中文环境

设置系统locale为中文

验证locale是否生效

(3)goaccess生成中文报告

--output=report.html 生成HTML 报告

--real-time-html 实时更新报告

(4)测试访问

浏览器访问http://192.168.10.101/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安装

需要重新编译安装nginx并扩展vts模块

(2)nginx配置开启vts

(3)测试访问

浏览访问http://你的IP/vts


网站公告

今日签到

点亮在社区的每一天
去签到