• Nginx-负载均衡与动静分离


    负载均衡

    负载均衡基本使用

    1 配置上游服务器

    upstream myserver { #是server外层
      server  ip1:8080;
      server  ip1:8080;       
    }
    
    • 1
    • 2
    • 3
    • 4

    2 配置代理

    server {
     location  / {         
        proxy_pass  http://myserver;#请求转向myserver 定义的服务器列表  注意这个http不能丢       
        
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    负载均衡的策略

    轮询

    1 轮询
    默认的权重都是1,则访问顺序为ABABAB

    upstream myserver { 
      server  ip1:8080;
      server  ip1:8080;       
    }
    
    • 1
    • 2
    • 3
    • 4

    2 加权轮询 则访问顺序为ABBABB

    upstream myserver { 
        server  ip1 weight=1;
        server  ip2 weight=2;
    }
    
    • 1
    • 2
    • 3
    • 4

    3 热备
    当我们第一台服务器能够正常提供服务的时候,服务器2是不会参与服务的,当我们的服务1 有问题了则会切换至服务器2

    upstream myserver { 
      server  ip1:8080;
      server  ip2:8080; backup;  #热备     
    }
    
    • 1
    • 2
    • 3
    • 4

    4 复杂轮询

    upstream myserver { 
      server ip1:8080 weight=2 max_fails=1 fail_timeout=10; #这里的fail_timeout有两层意思,第一层意思是在10s内允许的失败菜蔬为1 第二层意思是 当10内失败过一次服务器暂停服务10s后继续服务。
      server ip2:8080 weight=1 max_fails=3 fail_timeout=20;  
      server ip3:8080 backup; #热备 
      server ip4:8080 down;
    }
    
    upstream myserver { 
      server ip1:8080 max_fails=1 fail_timeout=10;
      server ip1:8080 max_fails=1 fail_timeout=10;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • down:表示当前的server暂时不参与负载均衡,该状态一般会对需要停机维护的服务器进行设置。
    • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
    • max_fails:表示在 fail_timeout 时间内最多允许的失败次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    • fail_timeout:经历了max_fails次失败后,暂停服务的时间,默认为 10 秒。max_fails可以和fail_timeout一起使用。
    • weight:默认为1。weight越大,负载的权重就越大。
    IP HASH

    nginx会让相同的客户端ip请求相同的服务器。如果是有状态的服务则应该采用ip_hash 比如登录功能,在第一台服务器记录了登录的状态,第二次邀请求同一台服务器才能读取到这个登录态。当然了会有其它的方式来解决这些问题,这里不做讨论。
    1 普通hash

    upstream myserver { 
      ip_hash ;
      server  ip1:8080 ;
      server  ip2:8080 ;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2 复杂hash

    upstream myserver { 
      ip_hash ;
      server ip1:8080 weight=2 max_fails=3 fail_timeout=20;
      server ip2:8080 weight=1 max_fails=3 fail_timeout=20;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于该策略需要注意以下几点:

    • 在 nginx1.3.1 版本之前,该策略中不能指定 weight 属性。
    • 该策略不能与 backup 同时使用。
    • 此策略适合有状态服务,比如 session。
    • 当有服务器宕机,必须手动指定 down 属性,否则请求仍是会落到该服务器。

    3 least_conn
    把请求转发给连接数最少的服务器。

    upstream myserver { 
      least_conn ;
      server ip1:8080 weight=2 max_fails=3 fail_timeout=20;
      server ip2 weight=1 max_fails=3 fail_timeout=20;  
      server ip3:8080 backup; #热备 
      server ip4:8080 down;    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    动静分离

    upstream static.liyong.com{ #两台静态资源服务器,两台静态资源要一致
        server ip1:80;
        server ip2:80;
    }
    
    upstream dynamic.liyong.com{ #两台动态资源服务器
        server ip3:8081;
        server ip4:8082;
    }
    
    server {
        listen 80;
        server_name localhost;
        
        location ~* .*(css|js|html|images).+ {
            proxy_pass http://static.liyong.com;
        }
        location / {
            proxy_pass http://dynamic.liyong.com;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    静态资源服务器:

    location / { #可以只用一个/拦截所有的请求根据目录来分类 也可以再分类
         root statics;
     }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    springboot吕梁学院导师制管理系统毕业设计源码251022
    webpack构建vue项目 基础09之生产环境 打包为zip文件 与 public静态文件的copy
    生命在于学习——Python人工智能原理(3.1)
    Vue3使用vue-print-nb插件打印功能
    Agda学习笔记1
    dbeaver连接MySQL数据库及错误Connection refusedconnect处理
    11-注意力机制
    .NET8 Identity Register
    关于wake on lan远程唤醒主机的问题,长时间关机无法远程唤醒
    【WINDOWS / DOS 批处理】8.3命名规则
  • 原文地址:https://blog.csdn.net/qq_43259860/article/details/134427039