一、什么是反向代理
反向代理就像现在流行的买菜APP,我们只需要购买我们要商品,而我们并不知道买给我们菜的商家是谁。
而正向代理就像我们现在常用的科学上网的APP一样的道理,也就是主动和被动的区别。
隧道式代理
请求和响应都必须经过代理服务器,缺点就是高流量下容易堵塞。
而 LVS
就解决了这个缺点,请求通过代理服务器转发到应用服务器,应用服务器把响应结果直接返回给我们的客户端,不需要将响应数据从代理服务器中转。
二、反向代理应用场景
1、通过 nginx 代理请求,将中转到具体的应用服务器。
2、基于 URL 重定向到不同的业务服务器
3、静态资源服务器
三、负载均衡器
将不同请求根据不同的算法均衡的分配到我们的业务服务器集群,从而降低某个别服务器的负载。
负载均衡算法:
1、轮询(轮着将请求分发给业务服务器)
2、IP 哈希
重试机制
当请求某台业务服务器时不能正常处理,就会触发重试机制,马上将请求转发到另一台业务服务器,保障高可用。
四、配置实现
4.1 代理配置
nginx 中配置反向代理的命令关键字为:proxy_pass <代理地址>
, 它是配置在 location
下面的。
# 代理到某个域名地址
proxy_pass http://www.baidu.com;
# 代理到某个IP地址
proxy_pass http://192.168.1.5;
温馨提示
proxy_pass
的作用类似于 root
,但是只能一个生效。
4.2 负载均衡配置——反向代理多个server
upstream httpds {
server 192.168.1.5:80;
server 192.168.1.6:80;
}
server {
# ...
location / {
proxy_pass http://httpds;
}
}
温馨提示
upstream
和 server
是在同一级。
权重配置
权重的目的就是设置分配请求的比例,权重越大分配的请求就越多。
upstream httpds {
server 192.168.1.5:80 weight=8;
server 192.168.1.6:80 weight=1;
}
标记某台设备不参与负载均衡
upstream httpds {
server 192.168.1.5:80 weight=8 down;
server 192.168.1.6:80 weight=1;
}
标记某台服务器为备用机器
正常情况不会用到这台服务器,只要当其他服务器死掉,才会用到这个backup配置。
upstream httpds {
server 192.168.1.5:80 weight=8 down;
server 192.168.1.6:80 weight=1;
server 192.168.1.7:80 weight=1 backup;
}
轮询的缺点
无法保持回话状态,因为客户端可能会随机分配到不同的应用服务器。
ip_hash
根据客户端IP hash转发到同一台服务器,但是现在客户端IP经常变换,不常用。
least_conn
最少连接访问,将请求分配给相对空闲的服务。
url_hash
需要第三方插件支持,定向流量转发,根据请求地址 hash 后转发到应用服务器。适用于固定资源不在同一服务器的情况。
fair
需要第三方插件,根据响应时间转发请求(会导致流量倾斜)