📚 Nginx学习笔记(一)——Nginx的简介
⚙️ 一、技术背景与演进
- 2000年代初,传统服务器(如Apache)面临C10K问题(单机万级并发连接瓶颈)
- Nginx由俄罗斯工程师Igor Sysoev于2004年发布,采用事件驱动+非阻塞I/O架构
- 2023年全球Web服务器市场份额达33%(W3Techs数据),反向代理领域占比超80%
🔍 二、与传统服务器对比
并发模型 | 事件驱动(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》实践验证。
评论前必须登录!
注册