Nginx(读作engine x)是一款高性能的HTTP服务器与反向代理工具,同时支持IMAP、POP3和SMTP协议的代理服务。它由俄罗斯开发者Igor Sysoev为Rambler.ru网站设计开发,该网站曾是俄罗斯访问量排名第二的平台。Nginx于2004年10月4日首次公开发布0.1.0版本,源代码采用类BSD许可证开放。凭借出色的稳定性、功能丰富、配置灵活以及极低的系统资源占用,Nginx迅速赢得广泛认可,成为现代Web架构中不可或缺的组件之一。其高效处理高并发请求的能力,使其在大型网站和云服务平台中被广泛应用,持续推动网络服务性能的提升。
1、 worker_rlimit_nofile 用于设置每个 Nginx 进程可打开的最大文件描述符数量,当前值为 65535。为确保配置生效,需提前通过ulimit -n 65535命令调整系统限制,否则可能导致进程无法正常启动或运行。
2、 worker_connections 是事件模块中的一个配置指令,用于设定 Nginx 单个工作进程所能处理的最大并发连接数量,默认值为 1024。服务器支持的总体最大客户端连接数由 worker_processes 和 worker_connections 共同决定,计算公式为:最大客户端连接数等于工作进程数乘以每个进程的连接数,即 Max_clients = worker_processes × worker_connections。当 Nginx 用作反向代理时,由于每条客户端连接会消耗多个文件描述符(包括与客户端和后端服务器的连接),此时最大连接数的估算需考虑资源开销,通常简化为 max_clients = worker_processes × worker_connections ÷ 4。需要注意的是,该连接数受限于操作系统对单个进程可打开文件句柄数的限制。若系统默认的文件描述符数量不足,Nginx 无法达到预期的连接处理能力。因此,在实际部署中,应通过执行类似ulimit -n 65536的系统命令,提升进程可打开的最大文件数限制,确保 worker_connections 的配置能够真正生效,从而充分发挥服务器的并发处理性能。
3、 一个Nginx进程能同时处理的客户端连接数受限于其可打开的最大文件描述符数量。即使有100个客户端尝试连接,若系统限制该进程仅能打开50个文件,则最多只能维持50个并发连接,超出部分将无法建立。
4、 Nginx的工作方式可分为单工作进程和多工作进程两种模式。单工作进程模式下,除主进程外仅有一个单线程的工作进程;多工作进程模式则包含多个工作进程,每个进程可运行多个线程。默认情况下,Nginx采用单工作进程模式运行,适用于大多数常规场景,具备良好的稳定性和资源利用率。
5、 通过观察Nginx的并发连接数,可以更清晰地了解网站当前的负载状况。常用的查看方式主要有两种:一种是借助Web界面进行监控,另一种是使用命令行工具查询。相比之下,Web界面提供的数据更为直观和精确。接下来将详细介绍这两种方法的具体操作步骤,帮助快速掌握Nginx的运行状态。
6、 通过Web界面监控Nginx状态需启用status模块,安装时应添加 --with-http_stub_status_module 参数。随后在nginx.conf配置文件的server块中加入相应指令,以开启状态页面访问功能,便于实时查看连接数、请求量等运行信息。
7、 配置完成后重启Nginx,可通过浏览器访问 http://localhost/status 进行查看,页面显示如下所示。
8、 当前 Nginx 正在处理的活跃连接数量称为活动连接数。统计信息中显示的server accepts handled requests表示服务器共接受了8个连接请求,成功建立握手连接8次,累计处理了500个客户端请求。Reading 指的是 Nginx 当前正在读取客户端发送的请求头部信息的数量;Writing 表示 Nginx 正在向客户端发送响应头部信息的数量。Waiting 描述的是在启用了 keep-alive 长连接机制的前提下,当前处于等待状态的连接数,其数值等于活动连接总数减去正在读取和写入的连接数之和。这部分连接已完成当前请求的处理,正保持连接状态,等待客户端发起新的请求。该指标反映了服务器维持的空闲持久连接数量,有助于评估连接复用效率与资源占用情况。通过观察这几项数据,可以了解 Nginx 的并发处理能力、连接管理效率以及对客户端请求的响应负载状况,为性能调优和容量规划提供重要参考依据。
9、 使用命令 `netstat -n | awk /^tcp/ {++S} END {for(a in S) print a, S}` 可统计各 TCP 连接状态的数量,便于分析网络连接情况。
10、 连接状态解析如下:CLOSED表示当前无任何连接活动;LISTEN指服务器处于监听状态,等待外部连接请求;SYN_RECV表示已收到连接请求,正等待确认;SYN_SENT代表本地应用已发起连接请求,正在建立链路;ESTABLISHED为连接已成功建立,正处于正常数据传输阶段,也反映当前并发连接数量;FIN_WAIT1表示本端应用已发出关闭请求,进入断开流程的第一阶段;FIN_WAIT2表示对方已同意关闭,本端仍在等待对方进一步操作;TIME_WAIT是连接已基本关闭,本端等待一段时间以确保对方收到确认包;CLOSING代表双方同时发起关闭操作;CLOSED_WAIT指本端等待关闭确认;LAST_ACK表示本端已发送最后确认包,等待对方最终响应;TIME_WAIT还包含确保网络中所有旧数据包失效的过程,防止干扰新连接。这些状态共同构成TCP连接的完整生命周期。
