正向代理(Forward Proxy)
一、说明
一般的访问流程是客户端直接向目标服务器发送请求并获取内容,比如大家通过浏览器,输入对应的网址,baidu.com、qq.com、taobao.com、zygxsq.cn/daohang 等,就可以直接进入对方的网站。
这时候使用正向代理后,客户端改为 向代理服务器发送请求,并指定目标服务器(原始服务器),然后由代理服务器和原始服务器通信,转交请求并获得的内容,再返回给客户端。
正向代理的作用一般是用来隐藏真实客户端的,通过代理服务器为客户端收发请求,使真实客户端对服务器不可见。
二、举几个具体的例子
①你的浏览器无法直接访问谷哥,这时候可以通过一个代理服务器来帮助你访问谷哥,那么这个服务器就叫正向代理。
②还有大家办公经常要用的V。P。N,也是类似的原理,通过家里的电脑连接公司的代理服务器,然后公司的代理服务器真正的去访问公司内部资料。这样大家的访问记录都会在代理服务器上有记录。
反向代理Reverse Proxy)
一、说明
还是与上面的一般访问流程对比,
这时候使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。
反向代理的作用是用来隐藏真实服务器的,为服务器收发请求,使真实服务器对客户端不可见。一般在处理跨域请求的时候比较常用。现在基本上所有的大型网站都设置了反向代理。
二、举几个具体的例子
假如公司实现了前后端分离,前端部署了一台服务器,11.11.11.11,后端的接口部署了很多的接口,比如专门处理订单服务的一台服务器11.11.11.12,专门处理单点登录和JWT的一台服务器,11.11.11.13,专门处理图片的一台服务器:11.11.11.14......总之后台有很多的接口,这时候呢,前台只要通过特定的前缀,比如前台请求订单服务的,就加个 /order/geyXXXXX;请求登陆的,加个前缀 /login/getXXXXX;请求图片的,加个/img/getXXXX ......这样,在代理服务器,通过拦截特定前缀,就可以将请求指定到特定的其他服务器上,这样就实现了反向代理,也实现了跨域请求
简单的说,一般给客户端做代理的都是正向代理,给服务器做代理的就是反向代理。
反向代理配置教程
用于反向代理的一般大家使用nginx或者apache等,我这里就举nginx反向代理的配置例子,通过upstream实现
#配置被代理的服务器 ,这里配置多个order服务器,表示负载均衡,这样就可以轮询的将所有的order的请求请求到这里的两台服务器上
upstream order{
server 11.11.11.12:8080;
server 11.11.11.22:8080;
}
同理,配置登陆的服务器,图片的服务器等等
upstream login{ server 11.11.11.13:8080; server 11.11.11.23:8080; }
upstream img{
server 11.11.11.14:8080;
server 11.11.11.24:8080;
}
然后呢,就可以通过监听不同的前缀,将请求反向代理到指定的服务器上
......
server{
location /order {
proxy_pass http://order;
break;
#下面这两条配置,意思是将http头转发给后端应用,不然你后端应用服务拿客户端IP地址的时候拿到的是nginx代理的地址而不是客户端的。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}location /login { proxy_pass http://login; break; } location /img { proxy_pass http://img; break; }
}
......
还有一个非常要注意的一点,就是proxy_pass http://login 和proxy_pass http://login/ 虽然多了一个 / 但是这是两个非常大的区别
location /login {
proxy_pass http://login;
break;
}
如果是proxy_pass http://login ,就是将请求链接完整的拼接上,如果是proxy_pass http://login/ ,就是将login给去掉后,后面的给拼接上
举个简单的例子,比如我现在前端请求的是 /login/getUserxx
通过下面的反向代理,实际请求的是 11.11.11.13:8080/login/getUserxx 或者 1.11.11.23:8080/login/getUserxx
location /login {
proxy_pass http://login;
break;
}
但是通过下面带/ 的反向代理后,实际请求的是 11.11.11.13:8080/getUserxx 或者 1.11.11.23:8080/getUserxx
location /login {
proxy_pass http://login/ ;
break;
}
当然这里只是简单的介绍了一下反向代理的基本配置,还有很多很多的配置,大家也可以网上搜索一下,其他大佬们的教程
参考文章
账号已迁移
https://www.cnblogs.com/mrlinfeng/p/6146866.html
nginx反向代理配置详解_nginx代理get请求配置-CSDN博客
Nginx location 配置 后路径映射问题 (路径替换)_nginx配置文件location替换成其他地址-CSDN博客
感谢原作者的分享,让技术人能够更快的解决问题