NGINX正向代理和逆向

71 阅读2分钟

好问题 👍。
Nginx 正向代理 (Forward Proxy)反向代理 (Reverse Proxy) 经常让人搞混,我给你拆开解释,并画出对比图。


1. 正向代理(Forward Proxy)

  • 位置:在 客户端 和 目标服务器 之间。

  • 作用:客户端通过代理访问外网,目标服务器并不知道真正的客户端是谁。

  • 典型用途

    • 科学上网 / VPN(隐藏客户端真实 IP,突破访问限制)。
    • 内网统一出口访问互联网。
    • 做缓存,提高访问速度。
  • 特点

    • 客户端必须配置代理(比如浏览器里设置代理地址)。
    • 代理代表客户端去访问外部资源。

图示

[Client] ---> [Forward Proxy: Nginx] ---> [Internet Server]

2. 反向代理(Reverse Proxy)

  • 位置:在 客户端 和 内部服务器 之间。

  • 作用:客户端以为自己访问的是代理,其实请求被转发给了后端真实服务器。

  • 典型用途

    • 负载均衡(Nginx 把请求分发到多台后端)。
    • 统一入口(隐藏真实服务器,保护安全)。
    • SSL 终止(由 Nginx 处理 HTTPS,再转发给后端)。
  • 特点

    • 客户端 不需要配置代理,只访问代理的地址即可。
    • 后端服务器对客户端是透明的。

图示

[Client] ---> [Reverse Proxy: Nginx] ---> [Internal Server(s)]

3. 核心区别对比

项目正向代理反向代理
面向对象客户端服务器
客户端是否需配置需要不需要
主要用途客户端访问外网、突破限制、隐藏客户端负载均衡、安全防护、隐藏后端
真实 IP 隐藏隐藏客户端隐藏服务器

4. Nginx 配置示例

正向代理(forward proxy)

(要在 nginx.conf 中开启 CONNECT 支持)

server {
    listen 8888;

    resolver 8.8.8.8;

    location / {
        proxy_pass $scheme://$http_host$request_uri;
        proxy_set_header Host $http_host;
    }
}
  • 客户端要在浏览器里设置:代理地址 = http://nginx服务器:8888

反向代理(reverse proxy)

server {
    listen 80;
    server_name mysite.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 用户访问 http://mysite.com,Nginx 把请求转发到本地 8080 的服务。