正向代理和反向代理的区别
本质区别
正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁
图解
- 正向代理的主动方是用户,主要用来解决
跨域
问题,还有隐藏
用户访问记录的作用
- 反向代理的主动方是服务器,主要是提供
负载均衡
、安全防护
等作用
作用层面上的区别
- 正向代理主要用来解决
跨域
问题,还有隐藏
用户访问记录的作用 - 反向代理主要是提供
负载均衡
、安全防护
等作用
为什么正向代理可以解决跨域问题
因为服务器之间不需要遵循同源策略
为什么正向代理可以隐藏用户访问记录
因为正向代理中服务器根本不知道访问服务器资源的是具体哪位用户,服务器无法获知用户的真实 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)
更改本地域名
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查看
可以看到输入www.aaa.com和www.bbb.com分别被Nginx反向代理分配到了8081和8082的服务器上了。