Nginx 是什么?正向代理和反向代理有什么区别?
简化版
Nginx 是一个高性能的 Web 服务器和反向代理服务器,常用来做反向代理、负载均衡、静态资源服务、限流等。正向代理代理的是客户端——客户端通过代理去访问服务器,服务器不知道真实客户端是谁(如翻墙 VPN、公司上网代理)。反向代理代理的是服务器——客户端访问代理,代理再把请求转发给后端真实服务器,客户端不知道背后是哪台服务器(如 Nginx 挡在一堆后端服务前面)。简明区分:正向代理隐藏客户端,反向代理隐藏服务器。
详细版
Nginx 的核心用途:
- 反向代理:客户端请求先到 Nginx,Nginx 转发给后端服务。
- 负载均衡:把请求分发到多台后端服务器,分摊压力。
- 静态资源服务器:直接返回 HTML/CSS/JS/图片,效率高。
- 动静分离:静态资源 Nginx 处理,动态请求转发给后端。
- 限流、缓存、SSL 终止、防盗链等。
正向代理 vs 反向代理:
| 维度 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 客户端 | 服务器 |
| 隐藏谁 | 隐藏客户端(服务器不知真实客户) | 隐藏服务器(客户端不知真实服务器) |
| 配置在谁那 | 客户端主动配置 | 服务端部署 |
| 典型场景 | 翻墙、公司上网代理、爬虫 | 负载均衡、Nginx 网关、CDN |
完整版教学
一、Nginx 是什么
Nginx(发音 “engine-x”)是一款轻量级、高性能的 Web 服务器 / 反向代理服务器,由俄罗斯人 Igor Sysoev 开发。它以高并发、低内存占用、稳定著称,是目前最流行的 Web 服务器之一。
Nginx 在实际架构中通常扮演流量入口的角色——所有外部请求先到 Nginx,由它决定:静态资源直接返回、动态请求转发给后端应用、多台后端之间做负载均衡。常见能力:
- 反向代理 + 负载均衡:挡在后端服务集群前面,分发请求。
- 静态资源服务:高效返回 HTML、图片、JS、CSS。
- 动静分离:静态自己处理,动态转发后端。
- SSL 终止:在 Nginx 层做 HTTPS 加解密,减轻后端负担。
- 限流、缓存、防盗链、gzip 压缩、URL 重写等。
二、代理是什么:中间人
「代理」就是一个中间人,帮你转发请求。你不直接和目标通信,而是通过代理转一手。根据「代理站在谁那一边、隐藏了谁」,分为正向代理和反向代理——这是最经典的面试对比。
三、正向代理:代理客户端,隐藏客户端
正向代理站在客户端这一侧,代表客户端去访问服务器。
- 客户端主动配置一个代理服务器,所有请求先发给代理,代理再转发给目标服务器。
- 目标服务器看到的是代理的 IP,不知道真实的客户端是谁——客户端被隐藏了。
典型场景:
- 科学上网 / VPN:国内访问不了的网站,通过境外代理去访问,网站只看到代理的 IP。
- 公司上网代理:公司统一用代理服务器上网,便于管控和缓存。
- 爬虫:用代理池隐藏真实爬虫 IP,避免被封。
简明区分:正向代理帮客户端「隐身」去访问服务器,服务器不知道真实客户是谁。
四、反向代理:代理服务器,隐藏服务器
反向代理站在服务器这一侧,代表后端服务器接收客户端请求。
- 客户端直接访问反向代理(以为它就是服务器),代理再把请求转发给背后真正的后端服务器,拿到响应后返回给客户端。
- 客户端不知道背后有多少台服务器、是哪一台处理了它的请求——服务器被隐藏了。
典型场景:
- 负载均衡:Nginx 反向代理挡在 10 台后端服务前面,把请求分发给它们,客户端只看到 Nginx。
- 统一入口/安全:后端服务不直接暴露公网,都藏在反向代理后面,更安全。
- CDN:也是一种反向代理,就近返回缓存内容。
简明区分:反向代理帮服务器「隐身」接收请求,客户端不知道背后是哪台服务器。
五、一张图记住区别
关键区别在于代理站在谁那一侧、对谁透明:
正向代理: 客户端 →→ [代理] →→ 服务器
(代理和客户端一伙,隐藏客户端;服务器只看到代理)
反向代理: 客户端 →→ [代理] →→ 服务器集群
(代理和服务器一伙,隐藏服务器;客户端只看到代理)
- 看代理为谁服务、和谁一伙:正向代理为客户端服务、反向代理为服务器服务。
- 看隐藏了谁:正向隐藏客户端、反向隐藏服务器。
- 看谁配置:正向代理要客户端主动设置、反向代理由服务端部署(客户端无感知)。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| Nginx | 高性能 Web 服务器和反向代理 |
| 正向代理 | 代理客户端访问外部网络 |
| 反向代理 | 代理服务端接收客户端请求并转发上游 |
forward proxy:
client -> proxy -> target website
reverse proxy:
client -> nginx -> upstream app servers
判断正向还是反向,看代理站在谁一边:替客户端出去是正向,替服务端接客是反向。
- 误区:Nginx 只能做反向代理。 Nginx 常用于反向代理,也能承担静态服务、负载均衡、缓存和部分正向代理能力。
- 误区:反向代理会暴露所有后端。 客户端只看到代理入口,后端地址、数量和拓扑可被隐藏。
- 误区:代理只是简单转发。 Nginx 还能做 TLS 终止、压缩、缓存、限流、Header 改写和负载均衡。
- 追问:反向代理为什么常放在应用前面? 统一入口、隐藏后端、做负载均衡、SSL 卸载和安全控制。
- 追问:正向代理常见用途? 企业出口控制、访问审计、缓存、代理访问外部资源。
- 追问:代理如何传递真实 IP? 常用 X-Forwarded-For 或 X-Real-IP,但后端只能信任可信代理设置的头。
七、加强记忆
Nginx = 高性能 Web 服务器 + 反向代理,做反向代理、负载均衡、静态资源、动静分离、限流、SSL 终止等,是流量入口。正向代理:站在客户端侧、代表客户端访问服务器,隐藏客户端(服务器只看到代理),客户端主动配置,场景是翻墙/公司代理/爬虫。反向代理:站在服务器侧、代表后端接收请求,隐藏服务器(客户端不知背后哪台),服务端部署,场景是负载均衡/统一入口/CDN。简明区分:口诀:正向代理隐藏客户端(为客户端服务),反向代理隐藏服务器(为服务器服务)。