1969
5
6002
超级版主
同样是 Web 服务,Apache 传统 prefork 模式遇到上万条慢连接就内存爆满、新请求直接拒绝;而 Nginx 仅少数几个进程,就可以同时处理上万甚至几十万条 TCP 长连接。很多面试只记住一句 “Nginx 性能很高”,却并不理解底层发生了什么。 Nginx 诞生之初就是为了解决著名的C10K 问题:单台服务器如何高效处理一万条并发连接。本文对比 Apache 传统每连接每进程模型,通俗讲解 epoll I/O 多路复用、非阻塞 IO、master‑worker 进程架构、graceful reload 平滑重启原理,以及反向代理在真实业务架构中的价值,同时补充现代同类开源 Web 服务如 Caddy、Pingora。 提示:本文为后端网络技术科普,参考 Nginx 官方文档、Linux 内核 epoll 相关公开技术资料整理。
提示:本文为后端网络技术科普,参考 Nginx 官方文档、Linux 内核 epoll 相关公开技术资料整理。
核心痛点:空闲连接也要独占完整进程资源,资源开销随连接数量线性膨胀。即便连接什么数据都不传输,只要 TCP 不断开,进程就被持续占用。
注意:一万连接不等于一万同时在干活,绝大多数是空闲 keep‑alive 长连接,这正是互联网线上非常普遍的场景。
注意:长连接 WebSocket 场景,旧 worker 会一直挂到老连接客户端主动断开;生产环境可配置worker_shutdown_timeout设置超时强制退出时间,防止旧进程长期堆积。
如果是完全停止再启动 Nginx,正在下载、传输的请求会直接被切断,而 reload 可以做到下载文件不会中途失败。
gunicorn 官方文档也明确建议生产环境前端部署 Nginx 反向代理。
举报
本版积分规则 发表回复 回帖后跳转到最后一页
相关侵权、举报、投诉及建议等,请发 E-mail:2026@typc.net
Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|晋ICP备2026008270号-1|晋公网安备14010602111293号