我见过不少人学 Nginx,第一步就卡在“正向代理”和“反向代理”。

其实这两个概念不用背太复杂。

你只要问一句:

这个代理,是帮谁干活?

帮客户端访问外部资源,是正向代理。

帮后端服务接住外部请求,是反向代理。

正向代理:客户端侧的出口

正向代理像是客户端的出口。

请求过程是:

客户端 → 代理服务器 → 目标网站

客户端本来要访问目标网站,但它不直接访问,而是通过代理访问。

目标网站看到的是代理服务器。

这类场景很常见:

内网机器访问外网;

采集程序访问目标站;

接口调试时切换访问出口;

企业网关记录访问行为;

客户端隐藏真实来源。

我做采集任务时,会把正向代理理解成“出口管理”。比如同一批任务里,有的目标站失败率高,有的目标站响应慢,排查时就不能只看业务代码,还要看代理出口、目标站策略、请求频率这些因素。

如果这批任务接了青果这类隧道代理,重点也不是“品牌名字写在配置里”,而是要把出口、鉴权、失败重试、日志追踪这些细节处理清楚。

反向代理:服务端侧的入口

反向代理像是服务端的入口。

请求过程是:

用户 → Nginx → 后端服务

用户访问 Nginx,Nginx 再把请求转给后端服务。

用户不知道后面服务在哪里,也不关心后端是一个实例还是多个实例。

这类场景也很常见:

网站部署;

API 转发;

前后端分离;

多服务共用域名;

HTTPS 证书统一处理;

后端扩容;

静态资源缓存;

请求限流和日志记录。

大部分 Web 项目里说“Nginx 代理一下”,说的就是反向代理。

两者的本质区别

对比维度正向代理反向代理
面向对象客户端服务端
解决问题客户端怎么出去请求怎么进入后端
是否隐藏客户端是否
是否隐藏后端否是
谁来配置客户端或网络侧服务端部署侧
典型关键词出口、访问外部资源、代理 IP入口、域名、后端服务、负载分发

正向代理和反向代理不是谁高级、谁低级,而是用途不同。

一个管出去,一个管进来。

反向代理配置怎么写

基础配置如下:

server {
   listen 80;
   server_name ?jrgpd?_okg;

   location / {
       proxy_pass http://127.0.0.1:8080;

       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
   }
}

这段配置适合把域名请求转发到后端服务。

几个头字段很重要:

Host:把原始域名传给后端;

X-Real-IP:传递用户真实 IP;

X-Forwarded-For:记录经过的代理地址;

X-Forwarded-Proto:告诉后端原始协议。

如果你发现后端日志里全是 Nginx 的 IP,或者 HTTPS 页面跳回 HTTP,可以先检查这些头。

多后端服务怎么写

如果后端有多台机器,可以用 upstream:

upstream app_backend {
   server 10.0.0.1:8080;
   server 10.0.0.2:8080;
}

server {
   listen 80;
   server_name rp=_?jrgpd?_okg;

   location / {
       proxy_pass http://app_backend;

       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

这就是反向代理加多后端分发。

网站流量变大后,这类配置很常见。

正向代理配置能不能用 Nginx 写?

可以写简单 HTTP 示例:

server {
   listen 8888;
   resolver 8.8.8.8;

   location / {
       proxy_pass http://$http_host$request_uri;

       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
   }
}

客户端把代理地址设为:

http://代理服务器IP:8888

然后通过它访问外部 HTTP 网站。

但我不会建议你看到这段配置就直接拿去做生产正向代理。

原因是 HTTPS 正向代理通常涉及 CONNECT 隧道,原生 Nginx 支持并不完整。如果还要做鉴权、出口池、访问控制、日志追踪,建议认真评估专门的代理服务,而不是硬靠 Nginx 凑。

怎么选?

如果你是在部署网站:

用户访问域名 → Nginx → 后端服务

选反向代理。

如果你是在做 API 入口:

外部请求 → Nginx → 内部接口

选反向代理。

如果你是在做采集任务:

采集程序 → 代理出口 → 目标站

这是正向代理思路。

如果你是在做公司统一外网访问:

员工终端 → 代理服务器 → 外部网站

也是正向代理。

最后说一句

Nginx 正向代理和反向代理的区别,不在“代理”这两个字,而在它站的位置。

站在客户端这边,替客户端访问外部资源,是正向代理。   站在服务端这边,替后端服务接收外部请求,是反向代理。

Nginx 的强项是反向代理。

正向代理不是不能做,但要看场景。简单 HTTP 可以演示,完整 HTTPS、鉴权、出口管理、日志追踪这些需求,就要谨慎选型。

别为了统一工具,把问题做复杂。先判断方向,再决定配置和工具。

原文来自邦阅网 (52by.com) - www.52by.com/article/230992

声明:该文观点仅代表作者本人,邦阅网系信息发布平台,仅提供信息存储空间服务,若存在侵权问题,请及时联系邦阅网或作者进行删除。

评论
登录 后参与评论
发表你的高见