目录

一. nginx性能调优

1.编译安装nginx

2. 更改进程数与连接数

3. 静态缓存功能设置 

4. 设置连接超时

5. 日志切割

6. 配置网页压缩 

二. nginx的深度监控 

1. GoAccess 简介

(1) GoAccess安装

(2) 配置中文环境

(3) GoAccess生成中文报告

(4) 测试访问

2. nginx vts 简介 

(1) nginx vts安装

(2) nginx配置开启vts

(3) 测试访问


一. nginx性能调优

1.编译安装nginx

此步骤省略参考主页的nginx

2. 更改进程数与连接数

(1) 进程数

在高并发环境中,需要启动更多的 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 x worker_connections

3. 静态缓存功能设置 

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

(1) 设置静态资源缓存

 

 

(2) 验证静态缓存

通过浏览器查看,响应头中包含字段即为缓存成功

 

4. 设置连接超时

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

 

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

5. 日志切割

随着 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脚本,进行日志分割

6. 配置网页压缩 

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

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

在http模块里面写跟http同级

 

注释:

  • 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 lk;:指定当响应内容长度大于等于 1KB 时才进行 Gzip压缩。
  • gzip_vary on;:向代理服务器发送 Vary:Accept-Encoding 头信息,让代理服务器根据客户端的 Accept-Encoding 头来决定是否缓存压缩后的内容。
  • gzip types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss;:指定对哪些 MIME 类型的内容进行 Gzip 压缩 。

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

 http://192.168.10.101/index.html

 

备注:

  • -I:该参数的作用是只获取服务器返回的 HTTP 头部信息,而不获取响应的主体内容。
  • -H:此参数用于在请求中添加自定义的 HTTP 头部信息。在这个例子里,添加的头部信息是 Accept-Encoding: gzip,这表示客户端(也就是发起请求的一方)支持 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 服务器http://gwsocket.io/。

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

(1) GoAccess安装

安装编译依赖 支持中文字体

源码编译安装 

  •  --enable-utf8:启用Unicode支持(显示中文必备)
  • --with-openssl:支持HTTPS日志分析

(2) 配置中文环境

设置系统Locale为中文

 

验证Locale是否生效

 

(3) GoAccess生成中文报告

  • --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安装

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

 

(2) nginx配置开启vts

修改nginx配置文件

与http模块同级 

 

server模块里面添加 

 

 

(3) 测试访问

浏览器访问http://ip/vts

 

更多推荐