资讯专栏INFORMATION COLUMN

Nginx 学习总结(1) —— 概述

james / 3213人阅读

摘要:模块化体系的内部结构是由核心部分和一系列的功能模块所组成。除此之外,应用相关的功能都是在一系列的功能模块中完成。将各功能模块组织成一条链,当有请求到达的时候,请求依次经过这条链上的部分或者全部模块进行处理。

Nginx 是什么

Nginx 是一款轻量的(相比 ApacheLighttpd 而言)、高性能的 HTTP 服务器,同时也可以用作反向代理、负载平衡器和 HTTP 缓存。Nginx 采用了模块化、事件驱动的架构设计,使用了异步非阻塞的事件处理机制处理请求,使得在高负载下也能提供更可靠的性能。

Nginx 模块化体系

Nginx 的内部结构是由核心部分和一系列的功能模块所组成。Nginx Core 实现底层的通讯协议,为其他模块构建了基本的运行时环境,并且构建了其他各模块的协作基础。除此之外,应用相关的功能都是在一系列的功能模块中完成。

Nginx 将各功能模块组织成一条链,当有请求到达的时候,请求依次经过这条链上的部分或者全部模块进行处理。每个模块实现特定的功能,例如,实现对请求解压缩的模块,实现与上游服务器(upstream模块)进行通讯的模块,实现与 FastCGI 服务进行通讯的模块等等。

有两个模块比较特殊,他们居于 Nginx Core 和各功能模块的中间,这两个模块就是 HTTP 模块和 MAIL 模块。它们用于处理与 HTTP 协议和 email 相关协议(SMTP/POP3/IMAP)有关的事件,并且确保这些事件能被以正确的顺序来调用其他的一些功能模块。功能模块分类:

event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理

phase handler:主要负责处理客户端请求并产生待响应内容

output filter:主要是负责对输出的内容进行处理,例如,对输出的图片的 URL 进行替换之类的工作

upstream:实现负载均衡的功能

load-balancer:实现负载均衡的功能,通过特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器

Nginx 进程模型

Nginx 程序在启动后,会以守护进程的方式在系统后台中运行,后台进程包含一个 master 进程和多个 worker 进程。

master 进程负责管理 Nginx 本身和其他 worker 进程,包含:接收来自外界的信号、向各 worker 进程发送信号、监控 worker 进程的运行状态、当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程等。

worker 进程主要处理基本的网络事件,多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。worker 进程的个数是可以设置的,一般我们会设置与机器 cpu 核数一致,这里面的原因与 Nginx 的进程模型以及事件处理模型是分不开的。

Nginx 的进程模型,可以由下图来表示:

Nginx 常用命令

nginx -h —— Nginx 帮助命令
nginx -s stop —— 快速停止 Nginx
nginx -s quit —— 平滑停止 Nginx
nginx -s reload —— 重载配置文件(用新的配置文件启动新 worker 进程,并平滑的关闭旧的 worker 进程)
nginx -t —— 检测配置文件是否正确

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39854.html

相关文章

  • Nginx 学习总结(2) —— 基本配置

    摘要:配置信息主要分为六大部分全局设置事件设置服务器设置虚拟主机设置匹配设置反向代理设置。最大客户端连接数由和决定作为服务器时,作为反向代理时,。参考文章服务器安装及配置文件详解的配置虚拟主机负载均衡和反向代理 这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) —— 概述,这一篇会对 Nginx 的基本配置做一些总结。 Nginx 配置信息主要分为六大部分: m...

    leoperfect 评论0 收藏0
  • 全栈开发自学路线

    摘要:前言这里筑梦师是一名正在努力学习的开发工程师目前致力于全栈方向的学习希望可以和大家一起交流技术共同进步用简书记录下自己的学习历程个人学习方法分享本文目录更新说明目录学习方法学习态度全栈开发学习路线很长知识拓展很长在这里收取很多人的建议以后决 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程...

    galaxy_robot 评论0 收藏0
  • 全栈开发自学路线

    摘要:前言这里筑梦师是一名正在努力学习的开发工程师目前致力于全栈方向的学习希望可以和大家一起交流技术共同进步用简书记录下自己的学习历程个人学习方法分享本文目录更新说明目录学习方法学习态度全栈开发学习路线很长知识拓展很长在这里收取很多人的建议以后决 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程...

    Scorpion 评论0 收藏0

发表评论

0条评论

james

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<