当前位置: 首页 > news >正文

介绍下Nginx的作用与请求转发机制

引言

最近笔者在业务中遇到了Nginx轮训策略使用不当导致后端服务的压力增加,从而导致容器CPU资源不足,响应超时的问题;

但由于对Nginx的了解仅限与作为反向代理使用,所以借用GPT工具整理了Nginx的作用以及请求转发机制,有些囫囵吞枣,因此本篇文章的很多内容都是GPT生成,如有错误,欢迎指正。

Nginx的核心作用

Nginx作为高性能Web服务器和反向代理工具,在负载均衡、静态资源处理、API网关等场景中有着重要作用。

反向代理与负载均衡

  • 功能:隐藏后端服务器真实IP,通过多台服务器分担流量,提升系统可用性。

  • 典型场景

  • 电商大促时,将请求分发至多台应用服务器,避免单点过载。

  • 结合upstream模块实现加权轮询、最小连接数等调度策略。

静态资源服务

  • 优势:直接处理图片、JS/CSS等静态文件,避免占用应用服务器资源。
  • 数据:Nginx处理静态资源效率比Apache高3倍以上(Nginx官方测试)。

缓存与加速

  • 机制:通过proxy_cache模块缓存动态内容,减少后端计算开销。
  • 案例:新闻网站将热门文章缓存10分钟,后端压力降低80%。

安全防护

  • DDoS防御:通过limit_req限制单位时间请求数。
  • WAF集成:结合ModSecurity规则过滤SQL注入等攻击。

请求转发机制

链路阶段分解

阶段Nginx核心操作技术要点
1. 连接建立- 监听80/443端口,通过worker_processes分配工作进程 - 接受TCP连接,建立socket套接字- 默认单进程可处理10万+连接(依赖epoll模型) - 支持HTTP Keepalive复用连接
2. 请求解析- 解析HTTP头、URI路径、Query参数、Host字段 - 验证请求合法性(如URI长度限制)- 支持HTTP/1.1HTTP/2协议 - 最大请求头大小由large_client_header_buffers控制
3. 路由匹配- 通过location指令匹配URI规则(如/eshop/) - 执行重写规则(rewrite指令)- 支持前缀匹配、正则匹配、精确匹配 - 匹配优先级:精确 > 前缀 > 正则
4. 负载均衡- 根据upstream配置选择后端节点(如轮询、最少连接) - 执行健康检查(max_fails- 支持DNS轮询IP哈希一致性哈希等算法 - 健康检查间隔默认为10秒
5. 请求转发- 修改请求头(proxy_set_header) - 建立到后端服务的TCP连接并转发请求- 支持HTTP/1.1长连接复用 - 可配置超时时间(proxy_connect_timeout
6. 响应处理- 接收后端响应,处理状态码、Header、Body - 可执行缓存、压缩、重写等操作- 支持gzip压缩(节省带宽) - 可缓存动态内容(proxy_cache
7. 返回客户端- 修改响应头(如添加X-Cache-Status) - 通过已建立的连接返回数据- 支持分块传输(chunked transfer) - 可配置TCP_NODELAY优化小文件传输

关键配置示例

nginxhttp {upstream eshop_backend {server 10.0.0.1:8080 weight=3;server 10.0.0.2:8080 weight=2;}server {listen 80;server_name eshop.example.com;location /eshop/ {proxy_pass http://eshop_backend/;  # 转发到upstreamproxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_set_header Connection "";  # 关闭后端长连接(若后端不支持)}}
}

一些常见问题

异常的状态码分析

499

499作为Nginx自定义的状态码,Nginx 对499的定义是client has closed connection。这个定义比较模糊,简单来说就是Nginx在完成响应之前客户端断开了连接。

常见原因与排查方向

原因分类具体表现排查方法
客户端行为异常- 浏览器标签页关闭时,未完成的请求被终止 - 移动端 SDK 提前取消请求- 通过 access_log 过滤 499 请求,分析 user_agentrequest_time
超时配置冲突- 客户端超时时间(如浏览器) < Nginx 超时时间 < 后端处理时间- 使用 Wireshark 抓包,对比客户端 Connection: close 发送时间与 Nginx 日志时间
恶意请求干扰- 爬虫高频请求后立即中断连接 - 自动化测试脚本未正确处理异步响应- 通过 limit_req 限制单 IP 请求频率,结合 fail2ban 封禁异常 IP

504

504指网关超时,在Nginx与后端服务交互流程中,表示在配置的超时时间内未收到后端服务的响应;一般来说,出现504异常码,都是服务处理请求的时间变长,可能的原因有

  • 流量激增导致CPU资源消耗,请求抢占CPU导致耗时增加;
  • 内存不足,触发垃圾回收;
  • 磁盘读写性能瓶颈,请求在等待IO完成;
  • 外部依赖异常,如数据库连接重试超时、三方服务无法处理新请求。
http://www.xdnf.cn/news/195589.html

相关文章:

  • Windows操作系统核心知识解析
  • C++ 表达式求值优先级、结合律与求值顺序(五十九)
  • 关于https请求丢字符串导致收到报文解密失败问题
  • 第二章:Agent System
  • RestRequest ,newtonsoft解析
  • 大模型(LLMs)强化学习—— PPO
  • 【angular19】入门基础教程(一):项目的搭建与启动
  • 如何查看电脑电池使用情况
  • 北京市延庆区“禅苑茶事“非遗项目挂牌及茶事院正式启用
  • Adobe Lightroom Classic v14.3.0.8 一款专业的数字摄影后期处理软件
  • 测试反馈陷入死循环?5大策略拆解新旧Bug难题
  • if consteval
  • 多模态大型模型,实现以人为中心的精细视频理解
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 跨平台开发同样支持retain()引用计数器处理.
  • 【氮化镓】质子辐照对 GaN-on-GaN PiN 二极管电导调制的影响
  • 后端Web实战之登录认证,JWT令牌,过滤器Filter,拦截器Interceptor一篇文章so easy!!!
  • 【python】-基础语法1
  • 颖儿生活提案:用海信璀璨505U6真空冰箱重建都市鲜食自由
  • 蓝桥杯 3. 压缩字符串
  • 树莓派5+edge-tts 语音合成并进行播放测试
  • EtherCAT转EtherNet/IP网关CEI-382实现罗克韦尔PLC与和利时伺服电机通讯
  • FFmpeg源码学习---ffmpeg
  • 《Operating System Concepts》阅读笔记:p821-p897
  • awk之使用详解(Detailed Explanation of Using AWK)
  • python10天- 文件操作模式详解
  • C++高性能日志库spdlog
  • 深入浅出限流算法(二):更平滑的滑动窗口
  • Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 (Orm Bee)
  • MySQL复合查询
  • HTML 从标签到动态效果的基础