什么是代理?
现实生活中,有许多事自己无法办或者做起来很费劲,这时便想到了找人帮忙,即代理人。海外代购就是个很好的例子,代购者帮客户购买商品,成为客户与商家之间的媒介。计算机世界也是如此,代理proxy是一种常见的工具。代理分为正向代理和反向代理。
正向代理
web服务通常的模式是client-server,即client端发送request,经Intenet到达server端,server端处理请求,返回response至client端。正向代理是基于client端而言,参见下图:
上图描绘了正向代理的情形。代理拿到client端的请求,代替User访问相应的网站或服务器。简而言之,正向代理是client端的代理,作为client端至intenet中间的媒介。还是海外代购的例子,买家为client端,商家为server端,代购者就是正向代理。图中的User可以有很多,proxy可以代理一群User。
反向代理
反向代理是基于服务器端的。提到反向代理,就不得不说大名鼎鼎的Nginx,一个很有名的反向代理服务器,这个下一节会讲到。反向代理的示意图如下:
client端的请求过来,由反向代理服务器处理,再分发给实际的服务器处理请求。这样做至少有两个好处,一个是安全,避免暴露真实的服务器在外面,另一个是可以实现负载均衡,当请求数以亿记时,可以按服务器集群的负载情发送请求,不至于阻塞。打个比方,淘宝某个店有多个客服人员,当很多买家同时需要询问时,需要一个系统将询问发送至空闲的客服人员那边。客服人员比作真实服务器,那个分发消息的系统就可以看作反向代理服务器。
nginx的端口代理转发
真实场景:我有一个腾讯云服务器,腾讯云是有安全组的,限制端口的访问。现在我放开了某个端口,比如3389,服务器上有两个flask进程,分别监听3001和3002端口。那么我需要用nginx实现访问3389端口时,nginx能根据path转发到相应的端口,如:输入http://x.x.x.x:3389/alice时转到http://x.x.x.x:3001/alice,输入http://x.x.x.x:3389/bob时转到http://x.x.x.x:3002/bob。
解决方法:利用nginx的端口转发功能。
- 输入命令 nginx -t,这是一个判断nginx配置文件格式是否正确的命令,可以用来查找nginx配置文件的路径;
- 输入命令 vim /etc/nginx/nginx.conf,编辑以下配置信息。服务器监听3389端口,依据location的不同,映射到不同的端口;
server{
listen 3389;
server_name locahost;
location /alice {
proxy_pass http://127.0.0.1:3001;
}
location /bob {
proxy_pass http://127.0.0.1:3002;
}
- 输入命令 nginx -t,验证配置文件格式正确;
- 输入命令 nginx -s reload,使配置改动生效。
至此,一个简单的端口转发就实现了。
nginx小白,望高手指点。转载请注明,谢谢。