目录
一:nginx性能调优
1.编译安装nginx
(1)安装支持软件
(2)创建运行用户,组和日志目录
(3)编译安装nginx
(4)添加nginx系统服务
2.修改用户与组
3.更改进程数与连接数
(1)进程数
(2)连接数
4.静态缓存功能设置
(1)设置静态资源缓存
(2)验证静态缓存
5.设置连接超时
6.日志切割
(1)编写脚本
(2)执行/opt/fenge.sh,测试日志文件是否被切割
7.配置网页压缩
二:nginx的深度监控
1.GoAccess简介
(1)GoAccess安装
(2)配置中文配置
(3)GoAccess生成中文报告
(4)测试访问
2.nginx vts简介
(1)nginx vts 安装
(2)nginx配置开启vts
(3)测试访问
Nginx的配置及运行需要pcre、zlib等软件包的支持,因此比应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。
[root@localhost ^]# dnf install -y gcc make pcre-deveel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar
[root@localhost~]# useradd -M -s /sbin/nologin nginx
[root@localhost~]# mkdir -p/var/log/nginx
[root@localhost ~]# chown -R nginx:nginx /var/log/nginx
[root@localhost `]# tar zxf nginx-1.26.3.tar.gz
[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
[root@localhost nginx-1.26.3]# make & make install为主程序nginx创建链接文件
[root@localhost nginx-1.26.3]# In -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost ^]# vi /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
User=root
Group=root
[Install]
WantedBy=multi-user.target
[root@localhost~]# systemctl daemon-reload
[root@localhost~]# systemctl start nginx
[root@localhost~]# systemctl enable nginx
Nginx运行时进程需要有用户与组的支持,用以实现对网站文件读取时进行访问控制。主进程由root创建,子进程由指定的用户与组创建。ginx默认使用nobody用户帐号与组帐号,一般也要进行修改。修改Nginx用户与组有两种方法,一种是在编译安装时指定用户与组,另一种是修改配置文件指定用户与组。编译Nginx时指定用户与组,就是配置Nginx时,在./configure后面指定用户与组的参数
[root@localhost nginx-1.26.3]# ./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx\.....
修改Nginx配置文件nginx.conf指定用户与组
[root@localhost ^]# vi /usr/local/nginx/conf/nginx.coonf
user nginx nginx; #修改用户为nginx,组为nginx
在高并发环境中,需要启动更多的Nginx进程以保证快速宝响应,用以处理用户的请求,避免造成阻塞。使用psaux命令查看Nginx 运行进程的个数。从命令执行结果可以看出master process是Nginx的主进程,开启1个;workerprocess是子进程,子进程也是开启了1个。修改Nginx的己置文件的work
er_processes参数,一般设为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个子进程,参数设置起到到了作用
[root@localhost~]# ps -ef | grep nginx
root 16252 1 0 13:56 ? 00:00:00 nginx: master pro
cess /usr/loca/sbin/nginx...........
默认情况下,Nginx的多个进程可能更多的跑在一颗CPU上。为了充分利用硬件多核多CPU,可以分配不同的进程给不同的CPU处理。在一台4核CPU服务器上,可以设置每个进程分别由不同的CPU核心处理,边到CPU的性能最大化。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
单个Worker进程最大并发连接数
[root@localhost `]# vim /usr/local/nginx/conf/nginx.conf
events {
worker_connections 1024;}
当Nginx将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
[root@localhost~]#vim /usr/local/nginx/conf/nginx.conf
location\.(gif|jpg|jepg|png|bmp|ico)${
root html:
expires 1d;}
[root@localhost >#nginx -t
[root@localhost ^]#nginx -s reload
通过浏览器查看,响应头中包含字段即为缓存成功
在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件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响应头。
/opt/fenge.sh,把Nginx的日志文件/usr/local/nginx/logs/access.log移动到目录/var/log/nginx下面,以当前时间做为日志文件的名称,然后用kil1-USR1创建新的日志件/usr/local/nginx/logs/access.10g,最后删除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天之前的日志文件
[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. lo9g
-rw-r--r-- 1 nginx root 0 2 月15 18:57 /usr/local/nginx/1ogs/access.
log
设置crontab任务,定期执行脚本自动进行日志分割。
[root@localhost ^]# crontab -e
30 1 * * * /opt/fenge. sh
即每天的凌晨1:30分执行/opt/fenge.sh脚本,进行日志分割。
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_level2:用来指定gzip压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢,使用默认即可كا;
>gzip_typestext/plain:压缩类型,是对哪些网页文档启用压缩功能;
>gzip_varyon:选项可以让前端的缓存服务器缓存经过gzip压缩的页面。
修改Nginx的配置文件,加入压缩功能参数
[root@localhost~]# vi /usr/local/nginx/conf/nginx.conf
http {
......//省略部分内容
gzip on;//取消注释
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_min_length 1k;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/c
ss text/xml application/xml application/xml+rss;[root@localhost ^]# curl -I -H "Accept-Encoding: gzip" 192.168. 207.13
7
HTTP/1.1 200 OK
Server: nginx/1.26.3
Date: Thu, 17 Apr 2025 01:40:43 GMT
Content-Type: text/html
Last-Modified: Thu, 17 Apr 2025 01:38:05 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"68005b7d-36eea8"
Content-Encoding: gzip
GoAccess是一个开源实时 Web 日志分析器和交互式查看器,可在Linux系统上的终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的HTTP统计信息。
GoAccess解析指定的Web日志文件并将数据输出到X终端瑞。特点包括:完全实时:所有面板和指标都定时在终端输出上每200毫毫秒更新一次,在HTML输出上每秒更新一次。
安装编译依赖
[root@localhost~]# dnf install -y gcc make ncurses-devel openssl-deev
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
设置系统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"...
[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:实时更新报告。
Nginx的VTS模块(Virtual Host Traffic Status)是一个开源监控工具,用于实时收集和分析Nginx的流量、性能指标及状态数据。!下是其核心功能和特点:
实时监控
统计每个虚拟主机(server 块)的请求量(QPS)、带宽使用用、响应时间、连接数等关键指标。支持按状态码(如2xx、4xx、5xx)分类统计请求。
数据可视化
提供内置监控页面(默认路径/status),通过图表和表格展展示实时及历史数据。支持 JSON格式输出,方便集成到 Prometheus、Grafana等监控平台。
扩展性
通过 Lua脚本扩展自定义监控逻辑(如记录特定API的响应时间)。可配置数据存储策略(如保留最近1小时的数据)。
报警集成
结合阈值规则触发告警(需配合外部工具如Zabbix、Telegram Bot)。
需要重新编译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/ngin
X --user=nginx --group=nginx --with-http_ssl_module --with-htt
p_v2_module --with-http_realip_module --with-http_stub_status_mod
ule --with-http_gzip_static_module --with-pcre --with-stream
add-module=/root/nginx-module-vts-master
[root@localhost nginx-1.26.3]# make & make instal]1
修改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;#默认SON可设为html
access_log off;#关闭访问日志}
.............
}
}
[root@localhost`]#/usr/local/nginx/sbin/nginx -t
[root@localhost `]#/usr/local/nginx/sbin/nginx