架构——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 的核心职责

  1. Web 服务器:高效处理静态资源请求。
  2. 反向代理网关:转发请求到后端应用服务器,隐藏后端架构。
  3. 负载均衡器:分配流量到多个服务器,提升系统可用性。
  4. 安全防护层:通过 SSL 加密、访问控制保护后端服务。
  5. 流量管理:实现限流、缓存、压缩(如 Gzip)等优化。

三、Nginx 的工作原理

1. 事件驱动模型

  • 异步非阻塞 I/O
    Nginx 使用 epoll(Linux)或 kqueue(BSD)等系统调用,单线程可处理数千并发连接,避免传统多线程模型的上下文切换开销。
  • 多进程架构
    • Master 进程:负责读取配置、绑定端口、管理 Worker 进程。
    • Worker 进程:实际处理请求的进程,彼此独立,避免资源竞争。
      在这里插入图片描述

2. 请求处理流程

  1. 客户端发起请求到 Nginx 监听端口。
  2. Worker 进程通过事件驱动模型接收请求。
  3. 根据配置匹配 serverlocation 块,执行反向代理、缓存读取等操作。
  4. 若需访问后端服务器,通过负载均衡算法选择目标服务器。
  5. 返回响应给客户端(可能经过缓存或压缩处理)。
    在这里插入图片描述

3. 核心模块化设计

  • 模块分类
    • 核心模块(如 ngx_http_core_module
    • 第三方模块(如 ngx_http_lua_module 支持 Lua 脚本)
  • 动态加载:支持按需加载模块,减少资源占用。

四、Nginx 的应用场景

  1. 静态资源托管
    • 直接托管 HTML、图片等文件,替代 Apache 或 Tomcat。
  2. API 网关
    • 反向代理微服务,统一入口管理鉴权、限流、日志。
  3. 动态内容加速
    • 缓存数据库查询结果或动态页面(如电商商品页)。
  4. 高并发负载均衡
    • 分配请求到多台应用服务器(如抢购场景)。
  5. SSL 卸载
    • 集中处理 HTTPS 加解密,降低后端服务器压力。
  6. 灰度发布
    • 通过流量切分(如按比例或 IP)测试新版本服务。

五、Nginx 高性能的原因

1. 事件驱动与非阻塞 I/O

  • 单线程处理大量连接,避免多线程/进程的上下文切换开销。

2. 高效内存管理

  • 零拷贝技术:通过 sendfile 系统调用直接传输文件,减少内核态与用户态数据拷贝。
  • 内存池机制:预分配内存块,减少频繁的内存申请释放操作。

3. 多进程架构

  • Worker 进程独立运行,避免锁竞争,充分利用多核 CPU。

4. 轻量级设计

  • 模块化架构,核心代码精简,第三方模块按需加载。

5. 配置优化友好

  • 支持连接复用(Keep-Alive)、响应压缩(Gzip)、缓存等优化策略。

六、Nginx 的优缺点

优点

  • 高并发处理能力(单机支持数万并发连接)。
  • 低内存消耗(静态资源处理尤其高效)。
  • 灵活的配置和模块化扩展。
  • 广泛的应用场景和社区支持。

缺点

  • 动态内容处理依赖后端服务(如 PHP 需配合 FastCGI)。
  • 复杂配置需一定学习成本。
  • 原生不支持动态模块热加载(需重启生效)。

七、总结

Nginx 凭借其事件驱动模型、高效资源管理和模块化设计,成为现代 Web 架构的核心组件。无论是作为静态服务器、反向代理,还是负载均衡器,Nginx 都能显著提升系统性能和可靠性。合理配置其缓存、压缩、负载均衡策略,可应对高并发、大流量场景(如电商大促、在线教育等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring 学习 (注解)

目录 前言 常用的注解 须知 1 Conponent注解 demo(案例) 2 ControllerServiceRepository demo(案例) 3 ScopeLazyPostConstructPreDestroy demo(案例) 4 ValueAutowiredQualifierResource demo(案例) 5 Co…

机器学习 - 机器学习模型的评价指标

为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集 中的每一个样本进行预测,并根据预测结果计算评价分数。本文,我们来了解一下机器学习模型常用的评价指标。 一、分类问题常用到的混淆矩阵 在分类任务中&…

openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?

OpenAI o1模型在回答问题前会进行深入思考,并生成一条内部推理链,使其在尝试解决问题时可以识别并纠正错误,将复杂的步骤分解为更简单的部分,并在当前方法无效时尝试不同的途径。据悉,o1不仅数学水平与美国奥林匹克竞赛…

基于ArduPilot开发无人机飞控自动驾驶仪

目录 1、项目参数 2、硬件设计解析 2.1、主控与协处理器架构 2.2、高精度传感器集成 2.3、数据存储与恢复 2.4、电源管理与保护 2.5、通信与接口 本项目基于开源飞行控制固件 ArduPilot 开发,设计并实现了一款高度集成的 自动驾驶仪,可广泛应用于…

传输层协议TCP ( 下 )

文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP(Transmission Control Protocol,传输控制协议)是互联网最重要…

vscode使用常见问题处理合集

目录 一、使用vite创建的vue3项目,script和style首行代码不会缩进,且格式化属性字段等会换行问题 首行缩进情况如下: 属性、参数格式化换行情况如下: 解决方式: 一、使用vite创建的vue3项目,script和style首行代码不…

【C语言】程序环境与预处理

目录 程序的翻译环境和执行环境 粗谈编译链接 翻译环境 编译的几个阶段及链接 运行环境 预处理详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## 带副作用的宏参数 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 …

类与对象C++详解(中)-----构造函数与析构函数

1.构造函数 构造函数是一个特殊的成员函数,函数名和类名相同,构造函数的作用是初始化,以下是构造函数的一些特点: 1. 函数名与类名相同。 2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结&#…

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先,为什么要有 TCP/IP 网络模型&a…

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…

硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍

目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在每个步进…

机器学习·最近邻方法(k-NN)

前言 上一篇简单介绍了决策树,而本篇讲解与决策树相近的 最近邻方法k-NN。 机器学习决策树-CSDN博客 一、算法原理对比 特性决策树最近邻方法(k-NN)核心思想通过特征分割构建树结构,递归划分数据基于距离度量,用最近…

Deesek:新一代数据处理与分析框架实战指南

Deesek:新一代数据处理与分析框架实战指南 引言 在大数据时代,高效处理和分析海量数据是企业和开发者面临的核心挑战。传统工具如Pandas、Spark等虽功能强大,但在实时性、易用性或性能上仍有提升空间。Deesek(假设名称&#xff…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…

JVM内存模型详解

文章目录 1. 程序计数器(Program Counter Register)2. Java虚拟机栈(Java Virtual Machine Stacks)3. 本地方法栈(Native Method Stacks)4. Java堆(Java Heap)5. 方法区(…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发:运维有术,作者术哥。 今天,我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理,官方推荐使用 Harbor 作为镜像仓库管理工具,它为企业级用户提供…

代码随想录-训练营-day30

今天我们要进入动态规划的背包问题,背包问题也是一类经典问题了。总的来说可以分为: 今天让我们先来复习0-1背包的题目,这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量,然后给一个物体对应的需要…

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…

【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术

在侯捷老师的 C 系列课程中,《C 面向对象开发》这门课程让我对面向对象编程有了更深入的理解。面向对象编程(OOP)是现代软件开发中最重要的编程范式之一,而 C 作为支持 OOP 的语言,提供了强大的工具和特性。侯捷老师通…