首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Nginx应用与运维——Nginx监控配置及管理(一)
📅 2026/10/5 10:38:34
✍️ 爱科研究院
👁 阅读 3,247
Nginx监控配置及管理1、Nginx连接状态监控1.1、Nginx连接状态1.2、Nginx连接状态模块指令1.3、基于Zabbix的连接状态监控2、HTTP主机状态监控2.1、模块编译2.2、模块配置指令2.3、主机状态监控配置3、TCP/UDP主机状态监控3.1、模块编译3.2、模块配置指令3.3、TCP/UDP主机状态监控配置在Nginx的日常运维管理工作中Nginx的监控管理是一项重要工作。Nginx监控的内容主要包括Nginx的进程数、创建的TCP连接数、等待的连接数等。通过监控软件的实时数据采集功能工作人员可以及时发现及排查Nginx服务器在运行时发生的问题同时也能通过连接状态中各环节的监控数据了解客户端请求响应的性能情况。1、Nginx连接状态监控1.1、Nginx连接状态当客户端发送请求给Nginx服务器时每个连接会被Nginx按照执行情况标记为接受、处理和活跃3个状态。通过对这3个状态数据的监控可以清晰地了解当前Nginx服务器请求连接的处理状态。Nginx连接状态如图所示。接受(Accepts)状态建立并接受客户端的HTTP连接状态。处理(Handled)状态开始处理客户端的HTTP连接状态。活跃(Active)状态对客户端HTTP请求读取请求数据、处理请求数据以及当启用保持连接(keep-alive)机制时使当前HTTP连接处于保持连接机制的连接状态。请求(Requests)客户端发送的数据请求当启用保持连接(keep-alive)机制时客户端请求会在同一HTTP连接内多次使用。等待中(Waiting)状态当启用保持连接机制时等待下一次客户端请求的状态。读取中(Reading)状态正在被读取请求头的客户端连接状态。回写中(Writing)状态正在向客户端返回响应数据的连接状态。当有客户端与Nginx新建立连接时接受状态计数器会加1处理状态计数器通常与接受状态的计数器统计数值是相等的在HTTP并发连接数超过worker_connection的限制时处理状态计数器数值将因受worker_connection指令值的限制而小于接受状态计数器的数值。客户端连接被处理后将进入活跃状态Nginx会读取数据请求的请求头数据当前活动连接标记为读取中状态请求计数器会加1。当请求处理完毕向客户端返回响应数据时当前活动连接标记为回写中状态对启用保持连接的活动连接将标记为等待中状态直到超过Nginx保持连接相关指令限定值时关闭连接。1.2、Nginx连接状态模块指令Nginx提供了ngx_http_stub_status_module模块可用于获取Nginx运行时客户端连接各种状态的计数器数据。该模块需要在编译时添加–with-http_stub_status_module来启用。模块配置指令如表所示。连接状态信息指令连接状态数据1.3、基于Zabbix的连接状态监控Nginx连接状态模块仅提供了各种连接状态的数据统计和输出各状态数据可以通过Zabbix Agent脚本采集并通过Zabbix服务端配置为监控项实现Nginx连接状态的监控。首先在Nginx服务器上启用连接状态统计并配置统计数据输出接口。Nginx配置如下server{listen8080;access_log off;error_log off;location /status{stub_status;# 启用连接状态数据输出功能allow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}Zabbix Agent脚本可以通过Nginx本机8080端口的status路径获取Nginx连接状态的数据。因连接状态在不同状态下的数据都在一个页面中展示所以采集脚本需要通过不同的外部参数获取对应的数据。Zabbix Agent数据采集脚本如下mkdir-p/etc/zabbix/scriptscat/etc/zabbix/scripts/nginx_status.shEOF #!/bin/bash HOST127.0.0.1:8080/status function accepts { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($1)} echo$result} function handled { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($2)} echo$result} function drops { server/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print$1 $2} acceptsecho$server|awk {print int($1)} handledecho$server|awk {print int($2)} echo $[$accepts-$handled] } function requests { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($3)} echo$result} function active { result/usr/bin/curl http://$HOST 2/dev/null| grep Active | awk {print$NF} echo$result} function reading { result/usr/bin/curl http://$HOST 2/dev/null| grep Reading | awk {print int($2)} echo$result} function writing { result/usr/bin/curl http://$HOST 2/dev/null| grep Writing | awk {print int($4)} echo$result} function waiting { result/usr/bin/curl http://$HOST 2/dev/null| grep Waiting | awk {print int($6)} echo$result}$1EOF在Zabbix Agent端添加监控项的脚本如下cat/etc/zabbix/zabbix_agentd.d/nginx_status.confEOF UserParameternginx.accepts,/etc/zabbix/scripts/nginx_status.sh accepts UserParameternginx.handled,/etc/zabbix/scripts/nginx_status.sh handled UserParameternginx.drops,/etc/zabbix/scripts/nginx_status.sh drops UserParameternginx.requests,/etc/zabbix/scripts/nginx_status.sh requests UserParameternginx.connections.active,/etc/zabbix/scripts/nginx_status.sh active UserParameternginx.connections.reading,/etc/zabbix/scripts/nginx_status.sh reading UserParameternginx.connections.writing,/etc/zabbix/scripts/nginx_status.sh writing UserParameternginx.connections.waiting,/etc/zabbix/scripts/nginx_status.sh waiting EOF2、HTTP主机状态监控Nginx连接状态是Nginx服务器整体连接数据的统计在实际使用中Nginx会配置很多虚拟主机每个虚拟主机的客户端连接的处理状况也各不相同。当Nginx作为缓存服务或代理服务时所需的统计项也有不同的需求在Nginx的商业版本中由ngx_http_status_module提供基于主机状态的细粒度监控。对于Nginx开源版本推荐用第三方开源模块nginx-module-vts来实现Nginx HTTP主机状态监控。该模块覆盖了对主机连接数、HTTP请求、缓存及upstream等状态数据的监控。2.1、模块编译nginx-module-vts模块可以通过GitHub获取并在Nginx编译时添加。gitclone https://github.com/vozlt/nginx-module-vts.git在Nginx代码目录中使用–add-module参数添加nginx-module-vts模块即可。./configure --add-module../nginx-module-vts2.2、模块配置指令nginx-module-vts模块为主机监控提供了多个配置指令可实现监控数据html、json等格式的输出并可以自定义关键字的方式进行连接数据统计甚至通过统计数据进行限制请求连接数或流量的配置。模块配置指令如表所示。指令vhost_traffic_status_zone、vhost_traffic_status_dump、vhost_traffic_status_filter_max_node仅可在http指令域中编写。其他指令均可在http及其所包含的server、location指令域中编写。vhost_traffic_status_display指令启用时将提供主机状态监控数据输出功能监控数据包括Nginx服务器连接状态(Server Main)、Nginx主机连接状态(ServerZones)、过滤关键字连接状态(Filters)和上游服务器组连接状态(Upstreams)4个部分的内容。Nginx服务器连接状态包括了Nginx连接状态模块自带的连接状态统计数据。Nginx主机连接状态由配置指令vhost_traffic_status_filter_by_host设置是否启用。启用该功能后会对当前Nginx服务器配置的每个主机名的请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。如果所在主机配置了缓存(Cache)还会对缓存的各种状态进行数据统计。过滤关键字连接状态模块会按照配置指令vhost_traffic_status_filter_by_set_key设置的关键字进行状态统计通常会把$uri配置为关键字这样就会将每条URL的请求数(Requests Total)、请求时间(RequestsTime)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)的数据统计出来。如果被配置了缓存则该URL在缓存中的当前状态也会被输出。当Nginx服务器是代理服务器时会按照每个上游服务器组的名称对上游服务器组连接状态包含的每个被代理服务器的IP、端口、状态(State)、响应时间ResponseTime仅被代理服务器返回响应的时间、权重(Weight)、最大失败次数(Max Fails)、失败超过的时间(Fail Timeout)、请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。vhost_traffic_status_limit_traffic指令的member参数如表所示。vhost_traffic_status_limit_traffic_by_set_key的指令参数limitkey的语法格式如下group[subgroup]namelimitkey的group特定关键字分别为主机(NO)、独立上游服务器(UA)、上游服务器组(UG)、缓存(CC)、过滤器(FG)配置样例如下# 设置按照关键字$geoip_country_code进行访问统计vhost_traffic_status_filter_by_set_key$geoip_country_codecountry::$server_name;# 将过滤器(FG)中标识名称为US的访问请求的最大下载量设置为1024GBvhost_traffic_status_limit_traffic_by_set_key FGcountry::$server_nameUS out:1024G;# 将上游服务器组(UG)中上游服务器组(upstream)名称为backend的被代理服务器10.10.10.17:80最大请求数设置为1000 vhost_traffic_status_limit_traffic_by_set_key UGbackend10.10.10.17:80 request:1000;vhost_traffic_status_set_by_filter指令可以获取当前Nginx服务器在共享内存中的统计数据并赋值给指定的变量配置样例如下# 将主机名为example.org的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterserver/example.org/requestCounter# 将过滤区域country中访问主机example.org且被标识为KR的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterfilter/country::example.orgKR/requestCounter# 将上游服务器组名为backend的被代理服务器10.10.10.11:80的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterupstreamgroup/backend 10.10.10.11:80/requestCounter# 将独立上游服务器10.10.10.11:80的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterupstreamalone/10.10.10.11:80/requestCounter# 将缓存名称为my_cache_name的命中统计数据赋值给变量$cacheHitvhost_traffic_status_set_by_filter$cacheHitcache/my_cache_name/cacheHit2.3、主机状态监控配置模块nginx-module-vts为Nginx提供了很多监控统计功能。根据nginx-module-vts模块的配置指令可以设计一个全局的配置。对于不同的主机站点可以按照具体的功能设置不同的状态统计配置。全局vts配置如下vhost_traffic_status_zone;# 主机状态监控共享内存vhost_traffic_status_filter_by_host on;# 启用以server_name的主机名为关键字# 进行过滤统计vhost_traffic_status_display_sum_key all_zone;# 将serverZones显示区域下总计条目的# 显示名称设置为all_zonevhost_traffic_status_dump /tmp/vts.db;# 主机状态监控数据存储在/tmp/vts.db中server{listen8080;# 用于查看监控页的监听端口access_log off;vhost_traffic_status off;# 关闭当前站点的监控统计location /vts{vhost_traffic_status_display;# 启用主机状态监控数据输出功能vhost_traffic_status_display_format html;# 主机状态监控数据输出格式为htmlallow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}按照uri关键字进行过滤统计可以显示对应主机每条URL的请求统计数据。server{listen8002;server_name locahost www.nginxbar.org;root /opt/nginx-web;default_type text/xml;# 按照URI进行过滤统计vhost_traffic_status_filter_by_set_key$uriuri;}3、TCP/UDP主机状态监控Nginx服务器支持TCP/UDP的代理但Nginx只在商业版中提供了TCP/UDP服务的状态监控功能对于开源版本可以使用第三方模块nginx-module-stream-sts实现TCP/UDP服务的状态监控。由于Nginx stream模块的特性TCP/UDP服务的状态数据仅在日志处理阶段才会被统计计算。3.1、模块编译模块nginx-module-stream-sts可以通过GitHub获取该模块依赖nginx-module-sts模块也需要被下载。gitclone https://github.com/vozlt/nginx-module-sts.gitgitclone https://github.com/vozlt/nginx-module-stream-sts.git在Nginx代码目录使用–add-module参数添加nginx-module-sts模块和nginx-module-stream-sts模块。./configure --add-module../nginx-module-sts --add-module../nginx-module-stream-sts3.2、模块配置指令模块nginx-module-sts与nginx-module-stream-sts共同组成了TCP/UDP监控的配置指令集。配置命令如表所示。http配置指令stream配置指令1)指令stream_server_traffic_status_zone仅可编写在http指令域中。2)其他指令均可编写在http及其所包含的server、location指令域中。3)指令server_traffic_status_zone及server_traffic_status_histogram_buckets仅可编写在stream指令域中。4)其他指令均可编写在stream及其所包含的server指令域中。5)stream_server_traffic_status_display指令启用后才会启用监控数据输出功能监控数据包括Nginx服务器连接状态(Server Main)、Nginx stream主机连接状态(Server Zones)、过滤关键字连接状态(Filters)和stream上游服务器组连接状态(Upstreams)4个部分的内容。Nginx服务器连接状态包括Nginx连接状态模块自带的连接状态统计数据。Nginx stream主机连接状态会对当前Nginx服务器配置的每个stream主机端口的请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。过滤关键字连接状态模块会按照配置指令vhost_traffic_status_filter_by_set_key设置的关键字进行统计会对包含关键字连接的请求数(RequestsTotal)、请求时间(Requests Time)、请求频率(RequestsReq/s)、响应(Responses)状态码、响应总数(ResponsesTotal)、流量(Traffic)的数据进行统计并显示输出。stream上游服务器组连接状态包括每个上游服务器组的名称及其包含的每个被代理服务器的IP、端口、状态(State)、建立连接时间(Response Time Connect)、首字节时间(Response Time FirstByte)、响应时间 Response Time Response仅被代理服务器返回响应的时间、权重(Weight)、最大失败次数(Max Fails)、失败超时时间(Fail Timeout)、请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)数据的统计。6)server_traffic_status_limit_traffic指令的member参数值如表所示。3.3、TCP/UDP主机状态监控配置TCP/UDP主机监控状态页需要配置在http指令域中。http{stream_server_traffic_status_zone;# 启用stream主机状态监控并使用默认共享内存配置server{listen8080;# 用于查看监控页的监听端口access_log off;location /sts{stream_server_traffic_status_display;# 启用stream主机状态监控数据输出#stream主机状态监控数据输出格式为htmlstream_server_traffic_status_display_format html;allow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}}在stream指令域配置全局启用stream主机状态监控功能。stream{server_traffic_status_zone;# 启用stream主机状态监控并使用默认# 共享内存配置upstream redis{server192.168.2.100:6379;}server{listen6379;proxy_bind$remote_addrtransparent;proxy_pass redis;proxy_connect_timeout 5s;access_log logs/redis_access.log tcp;}}
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/5 10:33:33
车辆检测数据集与YOLO11训练全流程指南
2026/10/5 10:33:33
软考网络工程师案例分析:网络设计与故障排除的备考突破路径
2026/10/5 10:33:33
电商平台软件架构设计:微服务拆分、分布式事务与高并发落地指南
2026/10/5 11:18:37
MFC+GDI实现俄罗斯方块:Windows原生C++内存安全实践
2026/10/5 11:18:37
中文法律大模型落地实战:从zip包到法条问答的最小闭环
2026/10/5 11:18:37
C语言标识符从规则到实战:命名、作用域与编译错误排查
2026/10/5 11:18:37
人力替代技术演进史:从机械臂到AI大模型与具身智能
2026/10/5 11:18:37
Visual C++ DirectX仿暗黑RPG源码解析:从编译到运行
2026/10/5 11:13:37
从问题定义到落地复盘:解决方案的完整链路
2026/10/5 0:02:57
AZ-104题库深度拆解:从刷题到掌握Azure管理员核心考点
2026/10/5 0:02:57
WorkBuddy:基于MCP协议的组织级工作流神经中枢
2026/10/5 0:02:57
大模型 / AI 应用常见面试题及答案汇总(2026 最新版):用 TaoToken 统一 Key 跑通高频考点代码验证
2026/10/5 4:43:56
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/5 1:10:25
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/4 0:00:57
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/4 2:41:08
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/4 17:59:15
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/3 15:20:14
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)