博客
关于我
Nginx专题(六)-Nginx原理与优化参数配置
阅读量:106 次
发布时间:2019-02-26

本文共 1733 字,大约阅读时间需要 5 分钟。

Nginx的模块与进程模型

1. Nginx的模块

Nginx是一个高性能的Web服务器,它的核心设计基于模块化架构。Nginx的内核非常简洁,主要负责通过配置文件将客户端请求映射到特定的location block,而每个location block中的配置指令则会激活相应的模块来处理请求。

Nginx模块的分类

Nginx的模块从结构上可以分为以下几类:

  • 核心模块

    • HTTP模块:负责处理HTTP协议相关的请求和响应。
    • EVENT模块:用于处理I/O事件,决定了Nginx是单线程还是多线程运行。
    • MAIL模块:用于处理邮件相关的功能。
  • 基础模块

    • HTTP Access模块:控制访问权限,例如IP限制、URI限制等。
    • HTTP FastCGI模块:用于与FastCGI后端交互,支持动态内容生成。
    • HTTP Proxy模块:作为反向代理服务器,代理请求到其他服务器。
    • HTTP Rewrite模块:用于URL重写和重定向。
  • 第三方模块

    • HTTP Upstream Request Hash模块:用于缓存和请求哈希,优化后端服务的负载均衡。
    • Notice模块:用于记录日志和通知信息。
    • HTTP Access Key模块:用于身份认证,实现API访问控制。
  • 模块的功能分类

    从功能上看,Nginx的模块可以分为以下三类:

  • Handlers(处理器模块)

    处理器模块直接处理请求,负责生成响应内容和修改HTTP头信息。通常每个location只对应一个处理器模块。

  • Filters(过滤器模块)

    过滤器模块用于对其他处理器模块输出的内容进行修改,例如压缩、加密、格式化等。Nginx允许多个过滤器链式工作,最终由Nginx输出结果。

  • Proxies(代理类模块)

    代理类模块是Nginx的核心功能之一,主要用于HTTP Upstream模块。这些模块负责与后端服务(如FastCGI、PHP、Python等)交互,实现请求代理和负载均衡。

  • 2. Nginx的进程模型

    Nginx采用多进程模型,通常包括一个master进程和多个worker进程。这种模型非常高效,能够在多核服务器上充分利用资源。

    master进程的职责
    • 管理worker进程:接收来自外部的信号(如HUP信号),向各个worker进程发送重启或停止命令。
    • 监控worker进程状态:检测worker进程的运行状态,当发现异常时,自动启动新的worker进程。
    • 处理配置文件变化:支持热部署,能够实时生效新的配置文件。
    • 与用户交互:接收信号并转化为操作,如重启服务或重新加载配置。
    worker进程的职责
    • 处理网络事件:worker进程是接收和处理网络请求的核心。每个worker进程都有自己的listenfd,用于监听新的连接。
    • 请求处理:每个连接仅由一个worker进程处理,避免了资源竞争。
    • 并发处理能力:通过I/O多路复用机制,每个worker进程都可以同时处理多个请求。
    • 独立性:每个worker进程是独立的,其他进程的请求不会影响当前进程的处理。
    worker进程的优势
  • 热部署支持:通过master进程的管理,worker进程可以在不停止服务的情况下进行配置更新。
  • 进程独立性:如果某个worker进程出现问题,不会影响其他进程,服务依然可以正常运行。
  • 资源利用:与多核服务器的CPU核数相匹配设置worker进程数,充分发挥计算资源。
  • worker进程的配置
    • worker_processes:设置worker进程的数量,建议与服务器的CPU核数一致。
      worker_processes 4;
    • worker_cpu_affinity:将worker进程绑定到特定的CPU核,避免CPU切换带来的性能浪费。
      worker_cpu_affinity 0001 0010 0100 1000;
    • worker_connections:设置每个worker进程能建立的最大连接数。
      worker_connections 1024;

    总结

    通过模块化架构和进程模型设计,Nginx能够高效地处理大量的HTTP请求。其模块系统灵活,可扩展;多进程模型又能充分利用服务器资源,确保高性能和稳定性。

    转载地址:http://tkdu.baihongyu.com/

    你可能感兴趣的文章
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>