架构——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.mzph.cn/bicheng/71172.shtml

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

相关文章

Java语言介绍

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。任职于Sun微系统的詹姆斯高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器…

shell——分支语句

文章目录 基本语法常用判断条件(1)两个整数之间比较(2)按照文件权限进行判断(3)按照文件类型进行判断(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令&#xf…

细说STM32F407单片机RTC入侵检测和时间戳的原理及使用方法

目录 一、入侵检测的功能 二、示例功能 三、项目设置 1、晶振、DEBUG、CodeGenerator、USART6、KEYLED 2、RTC (1)设置RTC的模式。 (2)General、Time、Date\Wake Up分组 (3)Tamper分组 1&#xff…

Python elasticsearch客户端连接常见问题整理

python 访问 elasticsearch 在python语言中,我们一般使用 pip install elasticsearch 软件包,来访问es服务器。 正确用法 本地安装elasticsearch时,应指定与服务端相同的大版本号: pip install elasticsearch7.17.0然后就可以…

讯方·智汇云校华为授权培训机构的介绍

官方授权 华为授权培训服务伙伴(Huawei Authorized Learning Partner,简称HALP)是获得华为授权,面向公众(主要为华为企业业务的伙伴/客户)提供与华为产品和技术相关的培训服务,培养华为产业链所…

python的类装饰器

装饰器不仅可以用于函数,还能作用于类。将装饰器应用于类时,其核心原理与作用于函数类似,都是通过接收一个类作为输入,然后返回一个新的类或者修改后的原类,以此来为类添加额外的功能 简单的类装饰器 def add_method…

MySQL数据库的设计原则

前言 首先,数据库设计原则通常包括范式化、性能优化、安全性等方面。但具体到MySQL,可能还有一些特定的最佳实践。例如,存储引擎的选择(InnoDB vs MyISAM)、索引的使用、事务处理等。 1.范式化的内容。   第一范式是…

【R语言】方差分析

方差分析的基本前提假设与t检验的前提假设类似,包括正态分布假设、观察独立性假设和方差齐性假设。 一、基本术语 在R语言以及更广泛的统计学领域中,方差分析(ANOVA,即Analysis of Variance)是一种用于比较两个或更多…

权限五张表

重点:权限五张表的设计 核心概念: 在权限管理系统中,经典的设计通常涉及五张表,分别是用户表、角色表、权限表、用户角色表和角色权限表。这五张表的设计可以有效地管理用户的权限,确保系统的安全性和灵活性。 用户&…

高效高并发调度架构

以下是从架构层面为你提供的适合多核CPU、多GPU环境下API客户端、服务端高级调度,以实现高效并发大规模与用户交互的技术栈: 通信协议 gRPC:基于HTTP/2协议,具有高性能、低延迟的特点,支持二进制序列化(通…

服务器A到服务器B免密登录

#!/bin/bash # 变量定义 source_host"192.168.42.250" # 源主机 IP target_host"192.168.24.43" # 目标主机 IP target_user"nvidia" # 目标主机的用户名 ssh_port"6666" # SSH 端口号 # 生成 SSH…

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想,例如类继承、接口、单例类等,本来应该是好事情,**但使用时对象之间的关系交错复杂,不太符合linux内核分层分模块的思路,导致整体理解起来比较困难&…

如何从0开始将vscode源码编译、运行、打包桌面APP

** 网上关于此的内容很少,今天第二次的完整运行了,按照下文的顺序走不会出什么问题。最重要的就是环境的安装,否则极其容易报错,请参考我的依赖版本以及文末附上的vscode官方指南 ** 第一步:克隆 VSCode 源码 首先…

【踩坑】⭐️MyBatis的Mapper接口中不建议使用重载方法

目录 🍸前言 🍻一、背景 🍹二、问题处理 💞️三、处理方法 🍸前言 小伙伴们大家好,很久没有水..不是,写文章了,都收到系统的消息了;我算下时间,上周是单休…

harmonyOS的文件的增、删、读、写相关操作(fs/content)

注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作 牵扯到两个支持点: fs和content这两个API; 具体的操作方法看下图: 创建文件 //js 引入 import fs from "ohos.files.fs" import featureAbility from "ohos.ability.featureAbility"; // 上下…

GC 基础入门

什么是GC(Garbage Collection)? 内存管理方式通常分为两种: 手动内存管理(Manual Memory Management)自动内存管理(Garbage Collection, GC) 手动内存管理 手动内存管理是指开发…

简要分析LeetCode树经典题目(Java)

目录 开场白 实战环节 准备工作 遍历问题 LeetCode144. 二叉树的前序遍历 方法一 方法二 LeetCode94. 二叉树的中序遍历 LeetCode145. 二叉树的后序遍历 方法一 方法二 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 LeetCode107. 二叉树的…

深度剖析 NVIDIA Isaac Sim:重塑机器人开发的创新引擎

一、引言 在上一篇文章探索探索 NVIDIA Isaac Sim:解锁机器人开发的无限可能中,我们初步领略了 NVIDIA Isaac Sim 平台为机器人开发带来的无限潜力。随着平台的不断更新迭代,又有许多令人惊喜的新特性和优化,让我们继续深入体验这…

Leetcode 712. Minimum ASCII Delete Sum for Two Strings

Problem Given two strings s1 and s2, return the lowest ASCII sum of deleted characters to make two strings equal. Algorithm Dynamic Programming (DP): similar as Longest Common Subsequence (LCS). If s1[i] ! s2[j]: F ( i , j ) min ⁡ ( F ( i − 1 , j ) …