正向代理与反向代理的区别与联系
在网络通信中,有时候我们不能直接访问目标服务器,或者目标服务器不能直接响应客户端的请求,这时候就需要使用代理服务器来作为中间人,帮助我们完成请求和响应的转发。根据代理的对象不同,我们可以把代理分为正向代理和反向代理。那么它们有什么区别和联系呢?本文将从以下几个方面来介绍:
- 什么是正向代理和反向代理
- 正向代理和反向代理的作用和优势
- 正向代理和反向代理的区别和联系
- 如何使用nginx配置正向代理和反向代理
什么是正向代理和反向代理
正向代理
正向代理是指客户端通过代理服务器来访问目标服务器,目标服务器不知道真正的客户端是谁,只知道请求来自于代理服务器。正向代理可以隐藏客户端的真实身份,让客户端访问一些原本无法访问的资源,比如Google、YouTube等。
反向代理
反向代理是指客户端通过代理服务器来访问目标服务器集群,客户端不知道真正的目标服务器是哪一个,只知道请求发送到了代理服务器。反向代理可以隐藏目标服务器的真实地址,让目标服务器集群对外提供统一的服务接口,实现负载均衡、安全防护等功能。
正向代理和反向代理的作用和优势
正向代理的作用和优势
- 访问原来无法访问的资源,如Google、YouTube等
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理的作用和优势
- 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
- 负载均衡,通过反向代理服务器来优化网站的负载
- 加密/SSL加速:将SSL加密工作交由配备了SSL硬件加速器的反向代理来完成
- 提供缓存服务 ,加速客户端访问
- 数据统一压缩 节约带宽
- 为网络带宽不好的网络提供服务
- 统一的访问权限控制
正向代理和反向代理的区别和联系
区别
- 从定义上看,正向代理是为客户端服务的,反向代理是为目标服务器服务的
- 从对象上看,正向代理隐藏了真实的客户端地址,反向代理隐藏了真实的目标服务器地址
- 从位置上看,正向代理位于客户端和目标服务器之间,反向代理位于目标服务器集群之前
联系
- 从功能上看,正向代理和反向代理都是进行请求和响应的转发
- 从结构上看,正向代理和反向代理都需要一个或多个中间人(即proxy)来完成转发任务
- 从协议上看,正向代理和反向代理都可以使用HTTP或HTTPS协议来进行通信
如何使用nginx配置正向代理和反向代理
nginx是一款高性能的HTTP服务器和反向代理服务器,它可以用来实现正向代理和反向代理的功能。本节将介绍如何使用nginx来配置正向代理和反向代理,并给出一些示例代码。
nginx配置正向代理
正向代理是指客户端通过代理服务器来访问目标服务器,目标服务器不知道真正的客户端是谁,只知道请求来自于代理服务器。正向代理可以让客户端访问一些原本无法访问的资源,比如Google、YouTube等。
要实现正向代理,需要在nginx.conf文件中添加以下内容:
http {
...
server {
listen 8080; #监听8080端口作为代理服务器
resolver 8.8.8.8; #使用Google DNS解析域名
location / {
proxy_pass $scheme://$host$request_uri; #将请求转发到目标服务器
proxy_set_header Host $host; #设置请求头中的Host为目标服务器域名
proxy_set_header X-Real-IP $remote_addr; #设置请求头中的X-Real-IP为客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设置请求头中的X-Forwarded-For为客户端真实IP和代理服务器IP
proxy_set_header X-Forwarded-Proto $scheme; #设置请求头中的X-Forwarded-Proto为客户端使用的协议(http或https)
proxy_connect_timeout 300; #设置连接超时时间为300秒
proxy_read_timeout 300; #设置读取超时时间为300秒
proxy_send_timeout 300; #设置发送超时时间为300秒
}
}
}
这样,我们就可以通过访问http://localhost:8080/来访问任意目标服务器的资源,比如http://localhost:8080/www.google.com/。nginx会将请求转发到目标服务器,并将响应转发回客户端。同时,nginx会在请求头中添加一些信息,来表示这是一个代理请求。
nginx配置反向代理
反向代理是指客户端通过代理服务器来访问目标服务器集群,客户端不知道真正的目标服务器是哪一个,只知道请求发送到了代理服务器。反向代理可以让目标服务器集群对外提供统一的服务接口,实现负载均衡、安全防护等功能。
要实现反向代理,需要在nginx.conf文件中添加以下内容:
http {
...
#定义一个上游服务器组,用于存放目标服务器的地址
upstream backend {
server 192.168.1.100:8080; #第一个目标服务器
server 192.168.1.101:8080; #第二个目标服务器
server 192.168.1.102:8080; #第三个目标服务器
}
server {
listen 80; #监听80端口作为代理服务器
location / {
proxy_pass http://backend; #将请求转发到上游服务器组
proxy_set_header Host $host; #设置请求头中的Host为代理服务器域名
proxy_set_header X-Real-IP $remote_addr; #设置请求头中的X-Real-IP为客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设置请求头中的X-Forwarded-For为客户端真实IP和代理服务器IP
proxy_set_header X-Forwarded-Proto $scheme; #设置请求头中的X-Forwarded-Proto为客户端使用的协议(http或https)
proxy_connect_timeout 300; #设置连接超时时间为300秒
proxy_read_timeout 300; #设置读取超时时间为300秒
proxy_send_timeout 300; #设置发送超时时间为300秒
}
}
}
这样,我们就可以通过访问http://localhost/
来访问目标服务器集群的资源。nginx会根据一定的算法(默认是轮询)选择一个目标服务器,并将请求转发到该服务器,并将响应转发回客户端。同时,nginx会在请求头中添加一些信息,来表示这是一个代理请求。