云计算百科
云计算领域专业知识百科平台

Nginx学习笔记(一)——Nginx的简介

📚 Nginx学习笔记(一)——Nginx的简介

⚙️ 一、技术背景与演进
  • C10K问题催生
    • 2000年代初,传统服务器(如Apache)面临C10K问题(单机万级并发连接瓶颈)
    • Nginx由俄罗斯工程师Igor Sysoev于2004年发布,采用事件驱动+非阻塞I/O架构
    • 2023年全球Web服务器市场份额达33%(W3Techs数据),反向代理领域占比超80%
  • 🔍 二、与传统服务器对比
    维度NginxApache HTTPDTomcat
    并发模型 事件驱动(epoll/kqueue) 进程/线程池(Prefork/Worker) 线程池(Connector)
    内存消耗 极低(静态资源<5MB/万连接) 高(进程模型内存线性增长) 中等(依赖JVM堆)
    动态处理 需反向代理(如uWSGI/PHP-FPM) 内置模块(mod_php) 原生支持Java Servlet
    配置语法 声明式+模块化 .htaccess文件 XML配置文件
    热部署 ✅ 支持无缝重载 🔄 需重启进程 🔄 需重启容器

    ✅ 典型场景选择

    • 静态资源/负载均衡:Nginx
    • .htaccess动态配置:Apache
    • Java EE应用:Tomcat+ Nginx前端代理
    🚀 三、核心功能特性
  • 高性能架构

    worker_processes auto; # 自动匹配CPU核心数
    events {
    worker_connections 10240; # 单Worker进程支持万级连接
    use epoll; # Linux高性能事件模型
    }

    • 单节点理论并发:支持10万+并发连接(实测2核4G服务器达8万QPS)
    • 零拷贝技术:sendfile机制减少内核态-用户态数据拷贝
  • 模块化设计

    • 核心模块:http, stream(TCP/UDP代理), mail(邮件代理)

    • 官方模块:

      ./configure –with-http_ssl_module # HTTPS支持
      –with-http_gzip_static_module # 预压缩静态文件
      –with-stream # 四层负载均衡

    • 动态模块:支持运行时加载(Dynamically Loadable Modules)

  • 关键功能矩阵

    功能类别实现方式应用场景
    静态服务 root/alias指令 前端资源分发
    反向代理 proxy_pass + upstream 应用服务器集群暴露
    负载均衡 轮询/权重/IP哈希/最少连接 流量调度
    安全控制 limit_req/access_log DDoS防御/访问审计
    内容处理 sub_filter/rewrite 响应内容替换/URL重写
  • 💡 四、典型应用场景
  • Web服务栈核心层

    #mermaid-svg-NQtvJhYKZ8agGcnG {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .error-icon{fill:#552222;}#mermaid-svg-NQtvJhYKZ8agGcnG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NQtvJhYKZ8agGcnG .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NQtvJhYKZ8agGcnG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NQtvJhYKZ8agGcnG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NQtvJhYKZ8agGcnG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NQtvJhYKZ8agGcnG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NQtvJhYKZ8agGcnG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NQtvJhYKZ8agGcnG .marker.cross{stroke:#333333;}#mermaid-svg-NQtvJhYKZ8agGcnG svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NQtvJhYKZ8agGcnG .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .cluster-label text{fill:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .cluster-label span{color:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .label text,#mermaid-svg-NQtvJhYKZ8agGcnG span{fill:#333;color:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .node rect,#mermaid-svg-NQtvJhYKZ8agGcnG .node circle,#mermaid-svg-NQtvJhYKZ8agGcnG .node ellipse,#mermaid-svg-NQtvJhYKZ8agGcnG .node polygon,#mermaid-svg-NQtvJhYKZ8agGcnG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NQtvJhYKZ8agGcnG .node .label{text-align:center;}#mermaid-svg-NQtvJhYKZ8agGcnG .node.clickable{cursor:pointer;}#mermaid-svg-NQtvJhYKZ8agGcnG .arrowheadPath{fill:#333333;}#mermaid-svg-NQtvJhYKZ8agGcnG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NQtvJhYKZ8agGcnG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NQtvJhYKZ8agGcnG .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NQtvJhYKZ8agGcnG .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NQtvJhYKZ8agGcnG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NQtvJhYKZ8agGcnG .cluster text{fill:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG .cluster span{color:#333;}#mermaid-svg-NQtvJhYKZ8agGcnG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NQtvJhYKZ8agGcnG :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}静态请求动态请求客户端Nginx边缘节点路由决策Nginx本地缓存Upstream: App集群Tomcat/Django/Node.jsCDN回源服务器

  • 微服务基础设施

    • API网关:基于location路由到不同服务

      location /user-service/ {
      proxy_pass http://user-cluster/;
      }
      location /order-service/ {
      proxy_pass http://order-cluster/;
      }

    • 灰度发布:通过map指令实现流量切分

      map $cookie_gray $backend {
      default production-backend;
      "true" gray-backend;
      }

  • 现代架构集成

    • Kubernetes Ingress Controller:如ingress-nginx
    • Serverless入口:作为FaaS函数的前置代理
    • WebSocket网关:proxy_set_header Upgrade $http_upgrade
  • 🌐 五、技术生态拓展
  • 衍生版本
    • OpenResty:集成LuaJIT,实现API网关逻辑编程
    • Tengine(阿里定制版):增强动态模块加载、sysguard过载保护
  • 性能监控工具链
    • ngx_http_stub_status_module:内置基础监控
    • Prometheus Exporter:实时采集QPS/连接数
    • Dtrace动态追踪:分析请求处理链路耗时

  • 此部分内容为后续学习奠定基础认知,后续章节将深入环境搭建与配置实战。建议结合Nginx官方文档(nginx.org/en/docs/)及《Nginx Cookbook》实践验证。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Nginx学习笔记(一)——Nginx的简介
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!