Nginx
高并发的反向代理与 Web 服务器,流量入口的守门员
Nginx 站在所有请求的最前面:接住 HTTP 请求,静态文件自己返回,动态请求转发给后端,还能做负载均衡、HTTPS 卸载、限流和缓存。它用事件驱动 + 少量 worker 进程撑住几万并发连接,这是它比 Apache 更省资源的原因。
它解决什么问题
后端有 4 台服务,用户不能记 IP;证书不能每台机器都配一遍;静态图片不应该走后端应用。
真实场景:典型场景:用户访问 https://shop.com/api/order,Nginx 终止 HTTPS,按 upstream 轮询转发到 4 台后端;访问 /static/*.png 直接读本地文件返回。
核心概念
每个概念一句话 + 一个类比。点击卡片看更详细的解释。
反向代理
替后端接请求再转发,客户端以为只有一台服务器
类比:公司前台,访客不用知道员工坐在哪
看概念详情负载均衡
按策略把请求分给多台后端,轮询/权重/IP 哈希
类比:银行叫号,哪个窗口空就去哪
看概念详情静态资源托管
图片、JS、CSS 由 Nginx 直接返回,不经过应用
类比:自助货架,拿了就走不用找店员
看概念详情rewrite
按正则改写 URL 或做跳转
类比:把旧门牌号换成新门牌号
看概念详情事件驱动模型
少量 worker 用 epoll 处理海量连接,一个连接不占一个进程
类比:一个服务员照看 100 桌,谁举手就去谁那
看概念详情数据流转动画
跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。
请求进入 Nginx 后的三种去向
← 左右滑动查看完整流程图 →
Nginx 接住 TCP 连接,完成 HTTPS 握手,证书只配在这一层。
提示:静态文件直接返回,动态请求按 upstream 策略转发,HTTPS 在入口统一终止。 悬停图中的节点可以看概念解释。
优劣势
短句说清适合什么、不适合什么,选型时先看这一栏。
- 事件驱动,几万并发连接内存占用很小
- 配置简单,静态资源、反代、HTTPS 开箱可用
- 负载均衡、限流、缓存、gzip 一站配齐
- 稳定性极好,跑几年不用重启
- 动态内容处理弱,必须转发给后端
- 模块要重新编译才能加(开源版)
- 配置语法自成一套,rewrite 规则容易写错
- 复杂的流量治理(熔断、灰度)需要 OpenResty 或网关
常见使用场景
每个场景都配一句「为什么用它」。
统一入口与 HTTPS
所有域名解析到 Nginx,证书和跳转集中管理。
为什么用它:后端机器不用各自维护证书,扩容也不影响入口。
动静分离
静态资源由 Nginx 直接返回,动态请求转发给应用。
为什么用它:减少应用服务器的无谓 IO,提升整体吞吐。
灰度与限流
按 header/cookie 分流到不同 upstream,用 limit_req 限速。
为什么用它:不用改代码就能做流量治理。
同类对比
和同赛道的组件并排看,差异一目了然。
Nginx 在前做入口,Apache 在后跑应用,是很多存量系统的现实选择。新架构基本只用 Nginx。
常见问题
上手第一个月最容易卡住的地方。
Q1和 Apache 有什么区别?
Nginx 是事件驱动 + 少量进程,适合高并发静态和反代;Apache 是每连接一进程/线程(prefork/worker),模块生态和 .htaccess 更灵活。新项目基本都用 Nginx 做入口。
Q2负载均衡有哪些策略?
默认轮询;weight 加权;ip_hash 按客户端 IP 固定;least_conn 最少连接;hash $request_uri 按 URL 哈希;商业版还有一致性哈希。
Q3怎么配置 HTTPS?
listen 443 ssl; ssl_certificate 证书链; ssl_certificate_key 私钥;再配 ssl_protocols TLSv1.2 TLSv1.3,80 端口做 301 跳转。
Q4worker_connections 和 worker_processes 怎么设?
worker_processes 一般等于 CPU 核数,worker_connections 默认 1024,理论上限是两者乘积。真正瓶颈常在文件描述符(worker_rlimit_nofile)和 upstream 的响应时间。