计算机网络系列 -- 正向代理和反向代理

659 阅读3分钟

正向代理和反向代理的区别

本质区别

正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁

图解

  • 正向代理的主动方是用户,主要用来解决跨域问题,还有隐藏用户访问记录的作用

image.png

  • 反向代理的主动方是服务器,主要是提供负载均衡安全防护等作用

image.png

作用层面上的区别

  • 正向代理主要用来解决跨域问题,还有隐藏用户访问记录的作用
  • 反向代理主要是提供负载均衡安全防护等作用

为什么正向代理可以解决跨域问题

因为服务器之间不需要遵循同源策略

为什么正向代理可以隐藏用户访问记录

因为正向代理中服务器根本不知道访问服务器资源的是具体哪位用户,服务器无法获知用户的真实 IP 地址

为什么反向代理可以提供负载均衡的作用

  • 客户端发送的(Nginx 反向代理服务器接收到)的请求数量,就是我们说的负载量
  • 按照一定的规则将请求数量分发到不同的服务器处理,就是一种均衡

所以,将服务器接收到的请求按照一定规则分发的过程,称为负载均衡

这就是 CDN 的核心技术原理

为什么反向代理可以提供安全防护的作用

实际上正向代理也可以提供安全防护功能,也就是说代理可以实现安全防护,原理如下:

如果用户B被列入黑名单,则可以借助代理服务器对其请求进行拦截

缓存的应用

代理除了可以解决跨域、负载均衡、安全防护的作用

CDN 缓存就是指的反向代理中,代理服务器对服务器的资源进行缓存,在代理服务器管辖的区域中,只要有首个用户请求了资源,该区域内的所有用户均可快速从代理服务器访问资源,不再需要千里迢迢得去服务器请求资源

使用Nginx实现反向代理

1.使用IDEA跑两个简单的程序,分别占用8081和8082两个端口,我这里还是借用了上一个博客里的程序,代码也很简单。以跑8081端口的nginx1为例:

@RestController
public class HelloController {
    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public String say(){return "这是8081端口";}
}

application.yml

server:
  port: 8081

2.修改一下本地hosts文件(C:\Windows\System32\drivers\etc)
浅析Nginx反向代理和负载均衡3
更改本地域名

3.运行启动Nginx,这里就不介绍了,详见上一篇博客。修改nginx.conf配置文件

upstream  aaa{    
    server  127.0.0.1:8081;  
}
upstream  bbb{    
    server  127.0.0.1:8082;  
}     
server {
    listen  80;
    server_name www.aaa.com; # 指定ip地址或者域名
    location  /{
        proxy_pass http://aaa/index; # 代理地址
	index  index.html index.htm;
    }
}
server {
    listen  80;
    server_name www.bbb.com;
    location  /{
        proxy_pass http://bbb/index;
        index  index.html index.htm;
    }
}

4.输入nginx -s reload指令重新加载Nginx,使用postman查看
浅析Nginx反向代理和负载均衡4
浅析Nginx反向代理和负载均衡5
可以看到输入www.aaa.com和www.bbb.com分别被Nginx反向代理分配到了8081和8082的服务器上了。

参考文章