正向代理:需要客户端主动设置代理服务器IP或域名进行访问,由设置的服务器IP或域名去获取访问内容并返回给客户端。
定义:正向代理是客户端请求代理服务器,然后由代理服务器代表客户端向目标服务器发起请求,目标服务器返回的数据经由代理服务器返回给客户端。
特点:
客户端发起:客户端知道代理的存在,并且需要通过代理来访问目标服务器。
隐藏真实IP:目标服务器无法看到客户端的真实IP地址,只有代理服务器的IP地址。
用途:
常用于突破网络限制、访问被屏蔽的网站、加速访问等场景。
示例:
访问某些被防火墙阻止的网站。
我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。
* 可以到达远方,不可描述
* 可以做缓存,加速访问资源
* 对客户端访问授权,上网进行认证
* 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
正向代理主要用于突破网络访问限制,如学术上网,以及隐藏客户端IP地址。在配置正向代理时,可以使用以下代码示例:
http {
# 定义代理服务器地址
proxy_pass http://example.com;
# 其他配置项...
}
反向代理:反向代理不需要客户端做任何设置,直接访问服务器真实IP或域名,但是服务器内部会自动根据访问内容进行跳转及内容返回。
定义:反向代理是客户端直接向代理服务器发起请求,代理服务器再将请求转发到后端的目标服务器。目标服务器将响应返回给代理服务器,然后代理服务器将响应返回给客户端。
特点:
服务器发起:客户端不需要知道后端的真实服务器,所有请求都通过反向代理。
隐藏后端服务器:反向代理可以隐藏后端服务器的真实IP地址,保护内部网络。
负载均衡和缓存:反向代理常用于负载均衡、SSL终止、缓存加速等目的。
示例:
网站使用反向代理服务器来处理所有的用户请求,并将请求分发到多个后端应用服务器。
因为反向代理隐藏了真实的服务端,当我们请求一个网站的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,我们不知道,也不需要知道,我们只需要知道反向代理服务器是谁就好了,反向代理服务器会帮我们把请求转发到真实的服务器那里去。
* 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
* 负载均衡,通过反向代理服务器来优化网站的负载
反向代理主要用于提供负载均衡和安全防护,例如将防火墙后面的服务器提供给Internet用户访问。在配置反向代理时,可以使用以下代码示例:
http {
# 定义代理服务器地址
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
# 其他配置项...
server {
# 监听端口
listen 80;
# 代理到后端服务器
location / {
proxy_pass http://backend;
}
}
}
正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端。
反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端。
正向代理和反向代理的本质区别在于代理的方向和服务对象不同,具体分析如下:
正向代理(Forward Proxy)
-
定义:正向代理是客户端与互联网之间的中间服务器,代表客户端向外部服务器发送请求。
-
核心特点:
-
客户端配置:需在客户端(如浏览器)显式设置代理服务器的地址和端口。
-
隐藏客户端:外部服务器只能看到代理服务器的IP,无法获取客户端的真实身份。
-
突破访问限制:用于访问被防火墙或地理限制的资源(如科学上网、企业内网访问外网)。
-
-
典型场景:
-
公司内部员工通过代理访问外网。
-
用户通过VPN访问被封锁的网站。
-
-
技术实现:
-
客户端发送请求到代理服务器,代理转发请求到目标服务器,并将响应返回给客户端。
-
反向代理(Reverse Proxy)
-
定义:反向代理是服务器端的代理,位于用户与真实服务器之间,代表服务器接收并处理客户端请求。
-
核心特点:
-
服务端配置:无需客户端设置,用户直接访问反向代理的地址。
-
隐藏服务器:客户端不知道后端真实服务器的存在,保护服务器架构信息。
-
负载均衡与安全:分发请求到多个服务器,提升性能;提供SSL加密、DDoS防护等。
-
-
典型场景:
-
网站使用Nginx反向代理分发请求到多个应用服务器。
-
CDN节点缓存内容并回源到原始服务器。
-
-
技术实现:
-
客户端请求反向代理,代理根据策略(如轮询、权重)转发到后端服务器,返回响应给用户。
-
核心对比
维度 | 正向代理 | 反向代理 |
---|---|---|
代理方向 | 客户端→代理→目标服务器 | 客户端→代理→真实服务器 |
配置主体 | 客户端显式配置 | 服务端隐式配置 |
隐藏对象 | 客户端身份 | 服务器身份 |
主要功能 | 突破限制、匿名访问 | 负载均衡、安全防护、缓存加速 |
典型工具 | Shadowsocks、Squid | Nginx、HAProxy、Cloudflare |
用户感知 | 用户知道代理存在 | 用户认为直接访问目标服务器 |
总结
-
正向代理是客户端的“代言人”,帮助用户访问外部资源,强调客户端的匿名性和访问控制。
-
反向代理是服务器的“守门人”,优化服务端的性能与安全,强调请求分发和资源保护。
-
两者均通过中间层实现请求转发,但方向、目的及配置方式截然不同,需根据实际需求选择应用。