架构——Nginx功能、职责、原理、配置示例、应用场景
以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明:
一、Nginx 的核心功能
1. 静态资源服务
- 功能:直接返回静态文件(如 HTML、CSS、JS、图片、视频等)。
- 配置示例:
server {listen 80;server_name example.com;root /var/www/html; # 静态文件根目录location / {index index.html;} }
2. 反向代理
- 功能:将客户端请求转发到后端服务器(如 Tomcat、Node.js、Python 应用等),隐藏后端细节。
- 配置示例:
server {listen 80;server_name api.example.com;location / {proxy_pass http://backend_servers; # 转发到后端服务器组proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;} }
3. 负载均衡
- 功能:将请求分发到多个后端服务器,支持多种负载均衡算法(轮询、权重、IP 哈希等)。
- 配置示例:
upstream backend_servers {server 192.168.1.101:8080 weight=3; # 权重轮询server 192.168.1.102:8080;server 192.168.1.103:8080 backup; # 备用服务器 }
4. SSL/TLS 终止
- 功能:处理 HTTPS 加密和解密,减轻后端服务器压力。
- 配置示例:
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.crt;ssl_certificate_key /etc/nginx/ssl/example.key;location / {proxy_pass http://backend_servers;} }
5. 缓存加速
- 功能:缓存动态内容或静态资源,减少后端负载并提升响应速度。
- 配置示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server {location / {proxy_cache my_cache;proxy_pass http://backend_servers;proxy_cache_valid 200 302 10m; # 缓存有效时间} }
6. 访问控制与安全
- 功能:限制 IP 访问、请求速率、防盗链等。
- 配置示例:
location /admin {allow 192.168.1.0/24; # 允许特定 IP 段deny all; # 拒绝其他 IP }location /uploads {valid_referers none blocked example.com; # 防盗链if ($invalid_referer) {return 403;} }
7. 日志记录
- 功能:记录请求日志,支持自定义日志格式。
- 配置示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main;
二、Nginx 的核心职责
- Web 服务器:高效处理静态资源请求。
- 反向代理网关:转发请求到后端应用服务器,隐藏后端架构。
- 负载均衡器:分配流量到多个服务器,提升系统可用性。
- 安全防护层:通过 SSL 加密、访问控制保护后端服务。
- 流量管理:实现限流、缓存、压缩(如 Gzip)等优化。
三、Nginx 的工作原理
1. 事件驱动模型
- 异步非阻塞 I/O:
Nginx 使用epoll
(Linux)或kqueue
(BSD)等系统调用,单线程可处理数千并发连接,避免传统多线程模型的上下文切换开销。 - 多进程架构:
- Master 进程:负责读取配置、绑定端口、管理 Worker 进程。
- Worker 进程:实际处理请求的进程,彼此独立,避免资源竞争。
2. 请求处理流程
- 客户端发起请求到 Nginx 监听端口。
- Worker 进程通过事件驱动模型接收请求。
- 根据配置匹配
server
和location
块,执行反向代理、缓存读取等操作。 - 若需访问后端服务器,通过负载均衡算法选择目标服务器。
- 返回响应给客户端(可能经过缓存或压缩处理)。
3. 核心模块化设计
- 模块分类:
- 核心模块(如
ngx_http_core_module
) - 第三方模块(如
ngx_http_lua_module
支持 Lua 脚本)
- 核心模块(如
- 动态加载:支持按需加载模块,减少资源占用。
四、Nginx 的应用场景
- 静态资源托管:
- 直接托管 HTML、图片等文件,替代 Apache 或 Tomcat。
- API 网关:
- 反向代理微服务,统一入口管理鉴权、限流、日志。
- 动态内容加速:
- 缓存数据库查询结果或动态页面(如电商商品页)。
- 高并发负载均衡:
- 分配请求到多台应用服务器(如抢购场景)。
- SSL 卸载:
- 集中处理 HTTPS 加解密,降低后端服务器压力。
- 灰度发布:
- 通过流量切分(如按比例或 IP)测试新版本服务。
五、Nginx 高性能的原因
1. 事件驱动与非阻塞 I/O
- 单线程处理大量连接,避免多线程/进程的上下文切换开销。
2. 高效内存管理
- 零拷贝技术:通过
sendfile
系统调用直接传输文件,减少内核态与用户态数据拷贝。 - 内存池机制:预分配内存块,减少频繁的内存申请释放操作。
3. 多进程架构
- Worker 进程独立运行,避免锁竞争,充分利用多核 CPU。
4. 轻量级设计
- 模块化架构,核心代码精简,第三方模块按需加载。
5. 配置优化友好
- 支持连接复用(Keep-Alive)、响应压缩(Gzip)、缓存等优化策略。
六、Nginx 的优缺点
优点:
- 高并发处理能力(单机支持数万并发连接)。
- 低内存消耗(静态资源处理尤其高效)。
- 灵活的配置和模块化扩展。
- 广泛的应用场景和社区支持。
缺点:
- 动态内容处理依赖后端服务(如 PHP 需配合 FastCGI)。
- 复杂配置需一定学习成本。
- 原生不支持动态模块热加载(需重启生效)。
七、总结
Nginx 凭借其事件驱动模型、高效资源管理和模块化设计,成为现代 Web 架构的核心组件。无论是作为静态服务器、反向代理,还是负载均衡器,Nginx 都能显著提升系统性能和可靠性。合理配置其缓存、压缩、负载均衡策略,可应对高并发、大流量场景(如电商大促、在线教育等)。
相关文章:

架构——Nginx功能、职责、原理、配置示例、应用场景
以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明: 一、Nginx 的核心功能 1. 静态资源服务 功能:直接返回静态文件(如 HTML、CSS、JS、图片、视频等)。配置示例:server {listen 80…...

Spring Boot中使用Flyway进行数据库迁移
文章目录 概要Spring Boot 集成 FlywayFlyway 其他用法bug错误Flyway版本不兼容数据库存在表了Flyway 的校验和(Checksum)不匹配 概要 在 Spring Boot 项目开发中,数据库的变更不可避免。手动执行 SQL 脚本不仅容易出错,也难以维…...

CAS单点登录(第7版)9.属性
如有疑问,请看视频:CAS单点登录(第7版) 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时,往往使用其名称进行定义和引用,而无需任何其他元数据或修饰。例如&#…...

137,【4】 buuctf web [SCTF2019]Flag Shop
进入靶场 都点击看看 发现点击work会增加¥ 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT(JSON Web Token)字符串。JWT 通常由三部分组成,通过点(.)分隔,分别是头部(Header&…...

P9853 [入门赛 #17] 方程求解
P9853 [入门赛 #17] 方程求解 - 洛谷 题目描述 小A有n个关于x的方程,第i个方程形如aixibici。方程的解x均为正整数,例如下面几个方程都是符合要求的方程: 2x 4 10 -3x 13 10 4x - 8 16 其中,第一组方程的解为x1…...
【网络安全 | 漏洞挖掘】跨子域账户合并导致的账户劫持与删除
未经许可,不得转载。 文章目录 概述正文漏洞成因概述 在对目标系统进行安全测试时,发现其运行着两个独立的域名——一个用于司机用户,一个用于开发者/企业用户。表面上看,这两个域名各自独立管理账户,但测试表明它们在处理电子邮件变更时存在严重的逻辑漏洞。该漏洞允许攻…...

spring集成activiti流程引擎(源码)
前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,请假审批demo从流程绘制到审批结束实例。 源码获取:本文末个人名片直接获取。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器,流行…...

ROS基本功能
1.Topic话题与Message消息(主要通讯方式) 基本规则 发布消息的步骤 常用工具 话题的订阅 使用launch启动多个节点...
C++基础系列【13】类的成员初始化
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...

Redis 03章——10大数据类型概述
一、which10 (1)一图 (2)提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 官网:Understand Redis data types | Docs (3)分别是 1.3.1redis字符串࿰…...
Ubuntu 上安装 Elasticsearch 7.6.0
要在 Ubuntu 24.04 上安装 Elasticsearch 7.6.0,可以按照以下步骤进行: 步骤 1: 更新系统依赖 确保系统是最新的,并安装必要的依赖包: sudo apt update sudo apt upgrade -y sudo apt install -y apt-transport-https openjdk-1…...
Android ListPreference使用
Android ListPreference使用 参考 添加链接描述 导入 androidx.preference.ListPreferenceListPreference是Android中的一个Preference子类,用于显示一个可选择的列表,并且可以保存用户所选择的值。它继承自DialogPreference,可以在用户点击时弹出一个对话框,显示可选择的…...

Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

计算四个锚点TOA定位中GDOP的详细步骤和MATLAB例程
该MATLAB代码演示了在三维空间中,使用四个锚点的TOA(到达时间)定位技术计算几何精度衰减因子(GDOP)的过程。如需帮助,或有导航、定位滤波相关的代码定制需求,请联系作者 文章目录 DOP计算原理MATLAB例程运行结果示例关键点说明扩展方向另有文章: 多锚点Wi-Fi定位和基站…...

英码科技基于昇腾算力实现DeepSeek离线部署
DeepSeek-R1 模型以其创新架构和高效能技术迅速成为行业焦点。如果能够在边缘进行离线部署,不仅能发挥DeepSeek大模型的效果,还能确保数据处理的安全性和可控性。 英码科技作为AI算力产品和AI应用解决方案服务商,积极响应市场需求࿰…...

CTex安装和使用(1)
CTeX是一款基于TeX/LaTeX的集成开发环境(IDE),主要用于文档排版,特别是在处理复杂的数学公式和学术论文方面具有显著优势。以下是CTeX的一些基本信息: 功能 文档编辑 :提供了一个友好的界面用于编辑LaTeX…...

Oracle序列(基础操作)
序列概念 序列是用于生成唯一、连续序号的对象。 序列可以是升序的,也可以是降序的。 使用CREATE SEQUENCE语句创建序列。 start with 1 指定第一个序号从1开始 increment by 1 指定序号之间的间隔为1 increment by -1 降序1000 999 998这样 maxvalue 2000 表…...

Unity Shader Graph 2D - Procedural程序化图形循环的箭头
前言 箭头在游戏开发中也是常见的一种图形之一,在游戏中箭头通常会用作道路引导或者指示,告诉玩家前进的方向,是比较重要的提示信号。本文将通过使用程序化图形来实现循环滚动的箭头效果,实践和熟悉Shader Graph的相关节点。 首先创建一个Shader Graph文件命名为Mo…...

4、C#基于.net framework的应用开发实战编程 - 测试(四、二) - 编程手把手系列文章...
四、 测试; 四.二、实际运行; 在应用调试完毕,Bug基本解决的时候就需要对应用进行实际运行来进行查看使用体验及分发的准备工作。 1、 运行设置; 在启动项目上右键属性,点击生成,将顶部的配置改…...
Windows搭建CUDA大模型Docker环境
Windows搭建CUDA大模型Docker环境 一、安装Docker二、拉取镜像三、启动容器四、安装依赖环境五、安装Miniconda3六、设置pip源地址 一、安装Docker windows中docker安装教程 二、拉取镜像 系统:Ubuntu20.04CUDA版本:11.8.0 docker pull nvcr.io/nvid…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...