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

Nginx 是什么

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

Nginx 模块化体系

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

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

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

  1. event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理
  2. phase handler:主要负责处理客户端请求并产生待响应内容
  3. output filter:主要是负责对输出的内容进行处理,例如,对输出的图片的 URL 进行替换之类的工作
  4. upstream:实现负载均衡的功能
  5. 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 —— 检测配置文件是否正确


PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。

Stay hungry, stay foolish.

846 声望
84 粉丝
0 条评论
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...

Jochen112阅读 14.2k评论 6

如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.6k评论 2

有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
2021 年 5 月,云原生社区技术沙龙·广州站,API7.ai(支流科技)联合创始人 & CTO,Apache APISIX PMC 王院生在活动上做了《有了 NGINX 和 Kong,为什么还需要 Apache APISIX》的分享,以下是现场分享的文字版。...

API7_技术团队1阅读 4.2k

Nginx 配置常用参数,看这一篇就够了
最近在全面学习Nginx,当作笔记了,如有错误,欢迎指出或深入交流。主模块 {代码...} 事件模块 {代码...} http部分 {代码...} 部分参数详细说明server_name {代码...} location {代码...} location表达式类型 {代...

开源到2阅读 1.9k

化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...

spacewander4阅读 1.6k

Nginx unexpected end of file 配置证书遇到问题,如何解决?
通过 letsencrypt 申请证书后,默认服务器安装了 Nginx 1.8 发现,在默认的 /etc/nginx/sites-enabled/default 内容配置 SSL 的 site.com.key 后。重启 Nginx 出现一下错误:

程序员泥瓦匠1阅读 1.2k

mac M1 nginx配置文件位置
mac nginx配置的原位置/usr/local/etc/nginx/nginx.confmac M1 nginx配置位置/usr/local/Homebrew/etc/nginx/nginx.confnginx -t 查看位置

寿兽阅读 3k

Stay hungry, stay foolish.

846 声望
84 粉丝
宣传栏