Nginx 反向代理及负载均衡学习

2023-10-08  本文已影响0人  __Y_Q

本节学习目标
1: 什么是正向与反向代理.
2: 如何配置反向代理.
3: 负载均衡的理解, 策略配置.
4: 对特定资源实现负载均衡.
5: 对不同域名实现负载均衡.
6: 实现对带有url 重写的负载均衡.

1. 反向代理和正向代理服务器

代理模式


网上扒的图

其中代理又分为 正向代理和反向代理.


正向代理

正向代理,指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。
正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端,也就是对于目标服务器 来说浏览器/客户端是隐藏的。

反向代理
反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

总结: 所谓正向代理/反向代理, 只是各自角色不同.

2. 如何配置反向代理

一般情况下,是单独配置一个server块来设置反向代理服务.

proxy_开头的一系列指令由nginx的标准http模块 ngx_http_proxy_module来解析.

在配置 proxy_pass 的过程中, 应该注意 url 中是否包含 uri, 两者的处理方式不同.

location /server{
    # 配置1 不包含uri
    proxy_pass http://192.168.110.2;        
    # 或者配置2 包含URI
    proxy_pass http://192.168.110.2/new/;
}

如果请求的地址为: http://localhost/server/hi.html,

3. 负载均衡

在反向代理的图中, 可以看到有个 负载均衡 的概念, 它的主要作用就是采用了一定的分配策略将请求平衡分配到网络集群的各个服务器节点上, 使得大量并发访问或数据流量被分担到多个单元上,减少用户响应时间.

负载均衡的策略

常用策略有: 轮询, 权重和 ip_hash. 默认为轮询.

upstream proxy_group1{
    #分配到的概率是一样的
    server 192.168.xx.xx:xxxx
    server 192.168.xx.xx:xxxx
    server 192.168.xx.xx:xxxx
}
upstream proxy_group1{
    server xxx.xxx.xx.xx weight =5;
    # 重试最多2次,超时时间30s
    server xxx.xxx.xx.xx weight =2 max_fails=3 fail_timeout=30s;
    server xxx.xxx.xx.xx #默认weight=1
    # down 需要休息,不再处理请求
    server xxx.xxx.xx.xx down;
    # backup 备用服务器,当所有其他服务器不能工作,或者宕机的时候,开始启用这台服务器
    server xxx.xxx.xx.xx backup;
}
upstream proxy_group1{
    # 解决seeison 共享把后续请求定位到同一服务器,使用这个指令后无法保证服务器的负载均衡.
    ip_hash;
    server xxx.xxx.xx.xx
    server xxx.xxx.xx.xx
}

总结: 一般使用的都是权重策略, 因为现在很多情况下都是集群部署, 而且集群下的各个服务器资源大多都是不均匀的, 资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重的负载均衡算法,可以更高效的利用资源和提高并发处理能力~.


4. 对特定资源实现负载均衡

upstream proxy_group1{
    server xxx.xxx.xxx.xx1;
    server xxx.xxx.xxx.xx2;
}
upstream proxy_group2{
    server xxx.xxx.xxx.xx3;
    server xxx.xxx.xxx.xx4;
}
server{
    location /mp3/ {
        proxy_pass http://proxy_group1;
        ......
    }
    
    location /video/ {
        proxy_pass http://proxy_group2;
        ......
    }
}

5. 对不同域名实现负载均衡.

upstream proxy_group1{
    server xxx.xxx.xxx.xx1;
    server xxx.xxx.xxx.xx2;
}
upstream proxy_group2{
    server xxx.xxx.xxx.xx3;
    server xxx.xxx.xxx.xx4;
}
server{
    server_name bbs.com
    location / {
        proxy_pass http://proxy_group1;
        ......
    }
}
server{
    server_name news.com
    location / {
        proxy_pass http://proxy_group2;
        ......
    }

6. 实现对带有url 重写的负载均衡.

upstream proxy_group1{
    server xxx.xxx.xxx.xx1;
    server xxx.xxx.xxx.xx2;
}
server{
    location /file/ {
        rewrite ^(file/.*)/media/(.*)\.*$ $1/map3/$2.map3 last;
        # 匹配 http://domain.com/file/dl/media/1.map3
        http://domain.com/file/abc/media/1.map3
        http://domain.com/file/efg/media/1.map3
        # last 匹配到以后,会继续向下匹配
        ......
    }
    location / {
        proxy_pass http://proxy_group1;
        ...
    }

部分内容参考链接, 关于正向与反向, 写的还是非常详细的.

上一篇 下一篇

猜你喜欢

热点阅读