百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

(十七) Nginx解析:架构设计、负载均衡实战与常见面试问题

off999 2025-03-03 19:41 26 浏览 0 评论

什么是Nginx?

Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,同时支持 IMAP/POP3/SMTP 协议。其设计以高并发、低资源消耗为核心优势,广泛应用于负载均衡、静态资源服务和反向代理等场景。

一、Nginx 的核心优势

  1. 高并发处理能力采用异步非阻塞的 I/O 多路复用模型(如 epoll/kqueue),单机可支持 5 万+ 并发连接。相比传统多线程模型(如 Apache),资源消耗更低,内存占用仅为 Apache 的 1/5-1/10。
  2. 反向代理与负载均衡支持轮询、权重分配、IP哈希等策略,实现流量分发到多台后端服务器,提升系统容错性和处理效率。内置健康检查功能,自动剔除故障节点,保障服务可用性。
  3. 低资源消耗与高稳定性基于事件驱动模型,CPU 亲和性设计减少上下文切换开销。支持热部署,可在不中断服务的情况下更新配置或版本。
  4. 灵活的扩展性模块化架构支持第三方插件扩展(如缓存、安全防护等)。配置文件简洁,支持 Rewrite 规则和正则表达式匹配。

二、主要功能与应用场景

  1. Web 服务器静态资源高效处理:直接托管 HTML、图片等文件,响应速度远超传统服务器。动静分离:将动态请求(如 PHP、Node.js )与静态资源(如 CSS、JS)分开处理,降低后端压力。
  2. 反向代理与安全防护隐藏真实服务器 IP,抵御 DDoS 攻击,支持 SSL/TLS 加密。通过访问控制(IP 白名单、HTTP 认证)提升安全性。
  3. 缓存与性能优化支持 GZIP 压缩和浏览器缓存,减少带宽消耗。反向代理缓存动态内容,降低后端服务器负载。
  4. 邮件代理与多协议支持可作为 IMAP/POP3/SMTP 代理服务器,处理邮件收发请求。

三、典型应用场景

  • 大型网站架构:如新浪、腾讯等,用于负载均衡和静态资源加速。
  • 微服务网关:作为 API 网关统一管理请求路由和限流。
  • 内容分发网络(CDN):结合缓存机制加速静态资源访问。

四、与其他服务器的对比

特性

Nginx

Apache

并发模型

异步非阻塞(epoll)

多线程/多进程

内存消耗

低(约 2.5MB/万连接)

高(约 20MB/进程)

热部署

支持

不支持


五、核心架构与事件驱动模型

1. 多进程架构设计

? Master - Worker机制
主进程(Master)承担管理配置、信号分发以及监控工作进程(Worker)的职责,支持热部署(借助nginx -s reload可在无需停机的情况下进行更新)。工作进程(Worker)基于异步非阻塞模型构建,单线程能够处理数以万计的并发连接,通过共享内存达成高效通信。

2. 事件驱动模型

? Epoll/Kqueue高效处理
采用Reactor模式,仅聚焦于活跃连接(相较于select/poll,减少了O(n)的遍历开销),可实现单个Worker处理超过10万的并发连接。每个Worker独立运行事件循环,避免了线程切换的开销。

3. 内存管理优化

? 静态资源处理的内存消耗低至2.5MB/万连接,借助内存池机制减少内存碎片。

六、负载均衡深度配置

1. 基础配置模板

http {
    upstream backend {
        # 加权轮询(默认策略)
        server 192.168.1.101:8080 weight=5; 
        server 192.168.1.102:8080 weight=3; 
        server 192.168.1.103:8080 backup;  # 备用节点 
        
        # 策略选择 
        ip_hash;       # 会话保持(解决Session问题)
        # least_conn;  # 最小连接数策略 
    }
 
    server {
        location / {
            proxy_pass http://backend; 
            proxy_set_header Host $host; 
        }
    }
}

2. 高级策略解析

策略类型

适用场景

特点

IP哈希

需会话保持的业务(如购物车)

相同IP始终路由到固定节点,可能引发负载不均

加权最少连接

服务器性能差异大的集群

动态选择当前连接数最少的节点,需配合健康检查使用

响应时间优先

对延迟敏感的应用

需安装第三方模块(如nginx-upstream-fair),根据响应时间动态分配请求

七、常见面试题

Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的软件工程师 Igor Sysoev 开发。以下是关于 Nginx 的详细介绍及其常见应用场景:

Nginx 的特点

  • 高性能和稳定性:Nginx 采用了事件驱动的异步非阻塞模型,能够在高并发情况下保持低资源消耗和高响应速度,稳定性强,可长时间稳定运行。
  • 低内存占用:在处理大量并发连接时,Nginx 对内存的占用相对较少,能够高效利用系统资源。
  • 丰富的模块功能:支持众多的模块,如 HTTP 模块、SSL 模块、反向代理模块等,通过这些模块可以方便地实现各种功能扩展。
  • 热部署:可以在不停止服务的情况下进行配置文件的更新和模块的升级,保证服务的连续性。

应用场景

Nginx 是什么?

Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的软件工程师 Igor Sysoev 开发.

它有哪些应用场景?

  • Web 服务器:可作为独立的 Web 服务器,直接处理静态资源请求,如 HTML、CSS、JavaScript、图片等文件。它能够高效地将这些静态文件发送给客户端,减轻后端应用服务器的压力。
  • 反向代理服务器:Nginx 常被用于反向代理场景,接收互联网用户的请求,并将请求转发到后端的真实服务器上。同时,它还可以对后端服务器的响应进行缓存、过滤等处理,提高系统的性能和安全性。例如,当有大量用户访问一个网站时,Nginx 可以根据预设的规则,将请求分发到不同的后端服务器上,实现负载均衡,提升整体系统的处理能力。
  • 负载均衡器:Nginx 可以实现对多个后端服务器的负载均衡,通过轮询、IP 哈希、加权轮询等多种算法,将客户端请求均匀地分配到不同的服务器上,使各服务器的负载相对均衡,避免单点故障,提高系统的可靠性和可用性。
  • SSL/TLS 终端代理:Nginx 可以对 SSL/TLS 加密的流量进行处理,实现 SSL/TLS 的卸载。即 Nginx 在前端接收加密的 HTTPS 请求,进行解密后再将明文请求转发给后端服务器,这样可以减轻后端服务器的加密计算压力,提高整体系统的性能。
  • HTTP 缓存服务器:Nginx 可以对经常访问的静态资源和部分动态资源进行缓存,当客户端再次请求相同资源时,Nginx 可以直接从缓存中返回数据,而无需向后端服务器发送请求,大大提高了响应速度,降低了后端服务器的负载,节省了带宽资源。
  • 邮件代理服务器:Nginx 还可以作为电子邮件(IMAP/POP3)代理服务器,为邮件系统提供代理和缓存功能,提高邮件系统的性能和可靠性。

如何配置 Nginx 实现静态资源访问?

设置nginx.config 文件, 配置具体的访问路径

Nginx 的常用命令有哪些?

  • 启动 : nginx
  • 停止 : nginx -s stop
  • 重启: nginx -s restart
  • 先停止再启动 : nginx -s stop && sudo nginx
  • 重载配置文件: sudo nginx -s reload
  • 检查配置文件语法: nginx -t
  • 查看 Nginx 版本信息: nginx -v

如何在 Nginx 中获取当前时间?

$time_local或$time_iso8601来获取当前时间

Nginx 命令中 -s 参数的作用是什么?具体有哪些用法?

向主进程Matser发送信号来控制Worker进程, 如 nginx -s stop 等

如何禁止某个 IP 的访问?

在设置nginx.config 文件 中加入 如 ''deny 127.0.0.2"等,配置完后重新加载nginx

如何实现请求的重定向?

在设置nginx.config 文件 中加入 "如old-path-->new-path"

location /old-path {
     rewrite ^/old-path$ /new-path permanent;
}

什么是正向代理和反向代理?

  • 正向代理:为客户端服务,客户端主动使用,向代理服务器发送请求,代理再转发到目标服务器,可突破访问限制等,隐藏真实客户端。
  • 反向代理:为服务器服务,客户端无感知,请求直接到反向代理服务器,由其转发到内部真实服务器,常用于负载均衡等,隐藏真实服务器。

如何使用 Nginx 做反向代理?

  1. 安装 Nginx:以 Ubuntu 系统为例,通过 sudo apt update 和 sudo apt install nginx 命令完成安装。
  2. 配置反向代理编辑配置文件,常见路径为 /etc/nginx/sites - available/default 或 /etc/nginx/conf.d/default.conf。
  3. 检查配置语法:使用 sudo nginx -t 命令检查配置文件语法是否正确。
  4. 重新加载配置:执行 sudo systemctl reload nginx 使新配置生效。
  5. 验证反向代理:通过浏览器或其他工具访问配置的域名,验证请求是否被正确转发到后端服务器。

如何用 Nginx 做限流,有几种限流算法,分别如何实现?

限流算法介绍

  • 漏桶算法:将请求视为水,以固定速率处理,超量请求在桶中等待,桶满则丢弃新请求,用于严格控制请求速率的场景。
  • 令牌桶算法:系统按固定速率向桶中放令牌,请求需获取令牌才能处理,允许一定突发请求,适用于对突发流量有容忍度的场景。

实现方式

基于漏桶算法(limit_req模块)

  1. 配置限流区域:在 http 块定义,如 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s,依据客户端 IP 限流,每秒允许 10 个请求。
  2. 应用限流规则:在 server 或 location 块使用,如 limit_req zone=mylimit burst=20 nodelay,指定限流区域、突发请求数及不排队处理。

模拟令牌桶算法(limit_req模块结合burst参数)

通过设置 burst 参数,允许短时间内有额外 “令牌” 处理突发请求,突破 rate 限制但在 burst 范围内的请求可立即处理。

基于连接数限流(limit_conn模块)

  1. 配置连接限制区域:在 http 块定义,如 limit_conn_zone $binary_remote_addr zone=perip:10m,按客户端 IP 限制连接数。
  2. 应用连接限制规则:在 server 或 location 块使用,如 limit_conn perip 10 限制每个客户端 IP 并发连接数为 10 个。

为什么 Nginx 的性能那么高?

源于其多进程单线程与模块化的架构设计、异步非阻塞I/O的事件处理机制、高效的内存池与低内存占用管理、HTTP 及反向代理缓存机制以及对 HTTP 和 SSL/TLS 协议的优化处理。

相关推荐

win10从u盘启动怎么设置(win10怎么从u盘启动电脑)

1.回到桌面。点击开始徽标,点击开始菜单左侧的设置。2.设置界面点击更新和安全。3.进入更新和安全界面,点击左侧的恢复选项。4.进入恢复界面,点击高级启动下面的立即重新启动。5.插入自己的U盘,等待...

系统大全网站(系统大全网站推荐)

下载时发生错误可能是以下原因:1.你的网速过慢,网页代码没有完全下载就运行了,导致不完整,当然就错误了。请刷新。2.网页设计错误,导致部分代码不能执行。请下载最新的遨游浏览器。3.你的浏览器不兼容导致...

win10官方启动盘(win10官方启动盘怎么用)

1、在开始菜单搜索“设置”,打开“设置”;2、点击“更新与安全”,在左侧菜单栏点击“恢复”;3、点击“启动项”,在弹出的窗口中会显示当前可以启动的项目,点击“编辑”;4、在打开的“编辑启动项”窗口中,...

win10系统安装不了(win10 安装不了)

电脑装不上win10系统可能是因为以下几个原因导致的原因一:win10安装文件不对我们在安装win10之前,要确保下载到安装包真实可用的,否则安装肯定会有问题,建议下载安全可靠的安装包!原因二:系统文...

国内dns哪个最快(dns开启好还是关闭好)

移动dns设置首选114.114.114.114,它又好又快。首选DNS和备用DNS都是一种域名系统,这两种域名系统有着先后之分,如果在首选DNS正常的情况下,就用首选DNS地址。当首选DNS服务器出...

winxp安装盘(winxp系统安装)

xp系统安装步骤如下1、将下载的xp系统iso压缩包文件下载到C盘之外的分区,比如下载到D盘,右键使用WinRAR等工具解压到当前文件夹或指定文件夹,不能解压到C盘和桌面,否则无法安装;?2、解压之后...

现在的win11稳定了吗(win11稳定嘛)

windows10更稳定,由于win11刚刚推出没多久,稳定差不够好,兼容性也有待提升,无论是应用还是游戏都会遇到不明程度的问题,因此,在日常的使用过程中,我们还是应当以稳定性为优先,选择win10是...

xp安装包下载到手机(xp系统安装包)

手机是基于ARM架构的处理器,而WindowsXP是基于x86架构的操作系统,因此无法直接在手机上安装WindowsXP。除非您的手机是使用Intel处理器,但这种情况非常罕见。如果您需要在手机上...

如何查看硬盘序列号(windows如何查看硬盘序列号)

1.打开开始菜单栏,输入【cmd】点击【确定】;2.在命令窗口依次输入【diskpart】-【listdisk】-【selectdisk0】;3.选好要查看的硬盘后,接着输入【detaildi...

虚拟机安装win7教程(虚拟机安装win7教程图解)

1.首先,下载并安装虚拟机软件,如VMwareWorkstation、VirtualBox等。2.打开虚拟机软件,创建一个新的虚拟机。3.在创建虚拟机的过程中,选择安装Windows7专业版的IS...

系统脱敏法的操作程序如何

系统脱敏疗法(systematicdesensitization)又称交互抑制法,是由美国学者沃尔普创立和发展的。这种方法主要是诱导求治者缓慢地暴露出导致神经症焦虑、恐惧的情境,并通过心理的放松状态...

闪迪u盘低级格式化工具(闪迪u盘格式化分配单元大小)

闪迪U盘格式化后速度变慢的可能原因及解决方法如下:文件系统问题:格式化时选择的文件系统类型可能会影响U盘的性能。常见的文件系统类型包括FAT32、NTFS和exFAT等。如果文件系统类型不合适,可能会...

psd文件下载(psd格式下载网站)

  1、在photoshop中,不能通过置入的方法来加载PSD文件,因为,通过置入的方法加载PSD文件,它是以合并图层的方法把PSD文件加入,这样,就失去了PSD文件的所有图层信息。  2、在文档中想...

宏碁官网下载win7系统(宏碁官方系统)

宏基笔记本win8系统换成win7步骤:1、更改bios设置,关闭“SecureBoot”功能,启用传统的“LegacyBoot”。2、制作u启动U盘启动盘,下载win7系统安装包3、设置U盘启动...

如何重装系统win7旗舰版32位

首先下载制作一个带系统的启动u盘,然后按以下步骤安装:1、首先关闭电脑上面的杀毒软件,2、进入bios选择u盘启动。3、插入启动u盘重新启动电脑4、进入pe系统镜像环节,选择要安装的系统(32位),然...

取消回复欢迎 发表评论: