Nginx学习笔记之Nginx请求处理流程

本文深入探讨了Nginx的请求处理流程,包括其master-worker架构、事件驱动模型以及如何处理TCP、UDP、HTTP和邮件请求。文章详细解释了Nginx如何利用状态机和epoll进行高效请求处理,以及在缓存、日志记录和负载均衡方面的运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:图片来自  github:https://github.com/russelltao/geektime-nginx 

Nginx请求处理流程

  • Nginx运行在企业内网的最外层,也就是边缘节点,它处理的流量是其它服务器处理流量的数倍,甚至是几个数量级。任何问题在不同的数量级之下,解决方案是不同的。所以在Nginx处理的场景中,所有的问题都会被放大。因此我们要去理解为什么Nginx要采用master-worker这种架构模型,为什么worker的数量要和CPU的核数相匹配,当我们需要在多个worker进程之间共享数据的时候,为什么在TLS,或者对一些限流限速这样的场景,他们的共享方式是有所不同的,这些需要我们对Nginx架构有一个清晰地了解。

  • Nginx请求处理流程图

  • 为什么需要看Nginx请求处理流程?
    • 前面了解到Nginx会记录Access日志,Error日志,可以处理静态的资源,可以做反向代理,这些东西,我们从Nginx内部去看,它究竟是怎样处理这些请求,它包含一些什么样的部分?
  • 从图左侧开始分析,WEB,EMAIL,TCP大致有三种流量进入Nginx以后,Nginx有三个大的状态机
    • 处理TCP,UDP四层的传输层状态机
    • 处理应用层的HTTP状态机
    • 处理邮件的MAIL状态机。
  • 为什么要叫状态机呢?
    • 是因为Nginx核心的深绿色的框是用非阻塞的事件驱动处理引擎,也就是我们所熟知的epoll,但我们是用这种异步处理引擎以后,通常需要状态机把请求正确地识别和处理
    • 基于这样一种事件 - 状态处理机,我们在解析出请求,要访问静态资源的时候,走图中左下方的箭头,就找到了静态资源。如果去做反向代理的时候,对反向代理的内容可以做磁盘缓存,缓存到磁盘上,也是走左下方这条线。
    • 但是我们在处理静态资源的时候,会有一个问题,当整个内存已经不足以完全地缓存住所有的文件缓存信息的时候,像AIO会退化成阻塞的磁盘调用。所以,在这里,我们需要一个线程池来处理,如图中“使用线程池处理磁盘阻塞调用”。
  • 对于每一个处理完成的请求,我们会记录Access日志和Error日志,这里也是记录到磁盘中的
    • 也可以通过syslog协议,记录到远程机器上。
  • 更多的时候,Nginx是作为负载均衡和反向代理来使用的。这个时候,我们可以把请求通过协议传输给后面的后面的服务器,也可以应用层的一些协议,如FastCGI,uWSGI,SCGI等等代理到应用服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值