说明反向代理之前,得先明白什么是正向代理,也就是代理。
一:正向代理
正向代理类似于一个跳板机:
- 假设我们现在要访问谷歌的服务器,但是由于防火墙的原因我们无法直接访问,此时就需要一个可以访问谷歌的代理服务器,我们连接到代理服务器,告诉代理服务器我们需要那个无法访问的网站的内容(目标服务器),代理服务器去取回后返回给我们。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
- 正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
- 正向代理实际上对目标服务器是有感知的。
正向代理解决的问题:
- 访问原来无法访问的资源,如google
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证(跳板机)
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
- 实际上正向代理中代理服务器是为了解决客户端和服务器无法直接建立连接的问题,而反向代理是则为了解决服务器响应多个请求的时候负载太高的问题。
二:反向代理
- 反向代理(Reverse Proxy)指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
- 对于客户端而言,代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理发送请求,反向代理根据请求内容判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
反向代理解决的问题:
- 保护和隐藏原始资源服务器,保证内网的安全,例如可以使用反向代理提供WAF功能,阻止web攻击
- 负载均衡,通过反向代理服务器来优化网站的负载
三:对比
四:负载均衡
我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群。
负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器上。这样一来不仅可以承担
更大的流量、降低服务的延迟,还可以避免单点故障造成服务不可用。
- Nginx负载均衡配置
http {
upstream cluster {
server srv1;
server srv2;
server srv3;
}
server {
listen 80;
location / {
proxy_pass http://cluster;
}
}
}
上述配置,Nginx会作为HTTP反向代理,把访问本机的HTTP请求,均分到后端集群的3台服务器上。
此时使用的HTTP反向代理模块是ngx_http_proxy_module。
在upstream配置块中要指明使用的负载均衡算法,比如hash、ip_hash、least_conn。
这里没有指定,所以使用了默认的HTTP负载均衡算法 - 加权轮询。