正向代理和反向代理都是代理服务器的两种应用场景,它们在网络请求的处理过程中扮演不同的角色:
正向代理(Forward Proxy):正向代理位于客户端和目标服务器之间,客户端通过正向代理来访问目标服务器。正向代理代表客户端发起请求,隐藏客户端的真实身份。常见的应用场景包括使用魔法、访问内网资源、缓存和过滤等。
反向代理(Reverse Proxy):反向代理位于客户端和目标服务器之间,客户端直接访问反向代理服务器,反向代理将请求转发给目标服务器。反向代理代表目标服务器接收请求,隐藏目标服务器的真实身份。常见的应用场景包括负载均衡、安全防护、缓存和SSL终端等。
使用 Nginx 作为反向代理的方法如下:
安装Nginx:根据操作系统和需求选择合适的Nginx版本进行安装。安装完成后,启动Nginx。
配置反向代理:编辑 Nginx 的配置文件(通常位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),在 http 或 server 块中添加反向代理配置。
示例配置:
http {
...
server {
listen 80; # 监听的端口号
server_name example.com; # 反向代理的域名
location / {
proxy_pass http://backend_server; # 将请求转发给目标服务器
proxy_set_header Host $host; # 设置请求头部信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
在这个示例中,将客户端的请求转发给名为 backend_server 的目标服务器。同时设置了一些请求头部信息,以便目标服务器获取客户端的真实 IP 地址。
重启 Nginx:保存配置文件并重启 Nginx,使配置生效。通常可以使用 nginx -s reload 或 systemctl restart nginx 命令重启 Nginx。
完成以上步骤后,Nginx 就被配置为反向代理服务器,可以将客户端的请求转发给目标服务器。
什么是正向代理和反向代理
-
正向代理
-
反向代理
-
两者的区别
1.正向代理
正向代理隐藏真实客户端
正向代理,就是一个位于客户端和原始服务器之前的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并且指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。
比如我们要去访问某个网站,我们直接访问不通,那么我们就可以找一个代理服务器为我们服务,我们通过代理服务器请求到这个网站。对于这个网站而言他只知道有一个服务器访问了自己,并不知道你访问了他。
再举一个简单的例子告诉你什么是正向代理:
假设 A 和 B 是同学,但平时并不是很熟,A 向 B 借钱,被 B 拒绝了。
此时 A 联系了 C,C 是 A 的好朋友,C 和 B 也很熟。
C 向 B 借了钱并且给了 A。
此时 A 拿到了 B 的钱,但B并不知道他的钱借给了 A。
这时B同学扮演了一个非常关键的角色,就是代理,也可以说是正向代理
即就是隐藏了真实的客户端
正向代理的过程,隐藏了真实的客户端。客户端请求的服务都被代理服务器代替来请求
2.反向代理
反向代理隐藏真实服务端
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载,提高访问效率。
反向代理方式是指以代理服务器来接收 internet 网上的连接请求,然后将请求转发给内部网络上的服务器,并从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个节点服务器。
简单举例什么是反向代理:
我们平时访问百度时,直接访问网址。
它背后可能有成千上万的服务器为我们服务,但具体是哪一台为我们服务,我们并不知道,也没必要知道。
我们只需要知道反向代理服务器是谁就可以(只要达到目的就可以了)。
网址就是我们的反向代理服务器,它会把我们的请求发送到真实的服务器那里去。
即隐藏真实的服务端
Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。
3. 两者的区别
两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端
正向代理中,proxy 和 client 同属一个 LAN,对 server 透明;反向代理中,proxy 和 server 同属一个 LAN,对 client 透明。实际上 proxy 在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把后出现的那种代理方式叫成了反向代理。
正向代理是指代理服务器代表客户端向目标服务器发送请求,代理服务器与目标服务器通信,并将响应返回给客户端。在这种情况下,目标服务器不知道请求的来源是代理服务器还是真正的客户端,因此正向代理可以用于隐藏客户端的真实 IP 地址和身份信息。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问 google 用 vpn 代理翻墙去访问(用户知道要访问真正的服务器)
反向代理是指==代理服务器代表原始服务器==向客户端发送响应,代理服务器接收客户端请求并将其转发到原始服务器,然后将原始服务器的响应返回给客户端。在这种情况下,客户端不知道响应的来源是原始服务器还是代理服务器,因此反向代理可以用于负载均衡、缓存静态资源、增加安全性等方面。
Nginx 是一个功能强大的开源 Web 服务器,也是一个反向代理服务器。使用 Nginx 做反向代理可以将客户端请求转发到后端多台真实服务器上,从而实现负载均衡、缓存静态资源、防止攻击等功能。下面是使用 Nginx 做反向代理的示例代码:
http {
upstream backend { # upstream 模块指定了后端服务器的列表,可以设置不同的权重,以实现负载均衡;
# 设置后端服务器列表
server backend1.com weight=5;
server backend2.com;
server unix:/tmp/backend3;
}
server {
listen 80 ; # 监听端口
server_name shier.com;
location / { # location 模块指定了反向代理的规则,以及缓存静态资源和防止攻击等功能
# 设置反向代理规则
proxy_pass http://backend/; # 将请求转发给原始服务器
proxy_set_header Host $host; #设置请求头部信息
proxy_set_header X-Real-IP $remote_addr;
# 缓存静态资源
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid any 20m;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
# 防止攻击
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 5;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=50 nodelay;
}
}
}
正向代理:
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。
-
正向代理需要主动设置代理服务器 ip 或者域名进行访问,由设置的服务器 ip 或者域名去访问内容并返回
-
正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见。
使用场景:比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
反向代理:
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。
-
正向代理需要配置代理服务器,而反向代理不需要做任何设置。
-
反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。
使用 Nginx 实现反向代理:
示例:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 9001 访问 http://192.168.17.129/edu/直接跳转到 127.0.0.1:8080 访问 http://192.168.17.129/vod/直接跳转到 127.0.0.1:8081 第一步,需要准备两个 tomcat,一个 8080 端口,一个 8081 端口,并准备好测试的页面 第二步,修改 nginx 的配置文件,在 http 块中配置 server
server {
listen 9001;
server_name 192.168.17.129;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081
}
}
正向代理:客户端向代理服务器发送一个请求并指定目标,由代理服务器向目标服务器发起请求,并将响应结果返回给客户端。代理的对象是客户端
使用场景:
-
突破访问限制:正向代理可以访问受限制的资源,例如被墙的网站和内网资源等
-
提高访问速度:正向代理能够缓存数据,当客户端请求相同资源时,能直接从缓冲区获取并返回,提高访问速度
-
隐藏客户端信息:正向代理能够隐藏客户端的真实 IP 和其他信息,保护客户端的隐私
-
网络爬虫:通过设置代理服务器,爬取目标网站的数据
反向代理:客户端发起请求到代理服务器,代理服务器将请求转发到内部服务器,获取到服务器的响应并返回给客户端。代理的对象是服务器
使用场景:
-
负载均衡:反向代理可以将客户端的请求分发到多台服务器上,实现负载均衡
-
缓存加速:反向代理通过缓存服务器上的静态资源,例如页面、图片和文件等,加速网站的访问速度
-
安全防护:反向代理可以在客户端和服务器之间进行安全过滤,如过滤恶意攻击、限制外部访问等,保护服务器的安全
使用 Nginx 做反向代理:
-
安装 Nginx 服务器
-
修改 nginx.conf 配置文件
http {
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://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;
}
}
# 实现负载均衡
upstream backend {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
}
-
listen :指定监听端口
-
server_name:指定监听地址
-
location:指定请求的路径
-
proxy_pass :指定目标服务器
-
proxy_set_header :指定传递给目标服务器的请求头信息,比如 Host,X-Real-IP,X-Forwarded-For 等,用来获取客户端的真实 IP
-
重启 Nginx 服务
在上面的例子中,当客户端访问 http://localhost/(没加端口时默认是 80 端口),会采用轮询的机制将请求转发到 127.0.0.1:8081 和 127.0.0.1:8082 上,然后将结果返回给客户端