• 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
  • 相关阅读:
    python-列表简介
    HTTPS的工作过程
    windows11家庭版安装hyperv-v
    网络编程基础知识总结——IP,端口,协议
    css动画基本使用
    论文阅读_大语言模型_Llama2
    1.1数据结构的基本概念
    idea 插件 checkstyle 规则示例和说明
    商业数据分析概论
    【数据结构】树和二叉树概念
  • 原文地址:https://blog.csdn.net/qq_43259860/article/details/134427039