• 关于nginx


    ## Nginx集群默认算法: upstream module

    upstream模块

    upstream web{
       server 192.168.10.42;
       server 192.168.10.43;
    }
    server{
       listen 80;
       server_name localhost;
       location/{
           proxy_pass http://web;
       }
       error_page 500 502 503 504/50x.html;
        location=/50x.html{
           root html;
       }
    }
    

    nginx的upstream目前支持4种方式的分配

    1、轮询(默认)
      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    
    2、weight
      指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    
    3、ip_hash
      动态请求
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    
    4、fair(第三方)
      按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    
    5、url_hash(第三方)
      按访问url的hash结果来分配请求,使每个ul定向到同一个后端服务器,后端服务器为缓存时比较有效。
    

    1、基于轮询分发

    upstream web{
       server 192.168.10.42;
       server 192.168.10.43;
    }
    server{
       listen 80;
       server_name localhost;
       location /{
           proxy_pass http://web;
       }
    }
    

    2、基于权重进行分发

    upstream web{
       server 192.168.10.42 weight=1;
       server 192.168.10.43 weight=2;
    }
    server{
       listen 80;
       server_name localhost;
       location/{
       proxy_pass http://web;
       }
    }
    

    3、基于hash结果进行分发

    upstream web{
       ip_hash;
       server 192.168.10.42;  #不支持 down 参数
       server 192.168.10.43;
    }
    server{
       listen 80;
       server_name localhost;
       location/{
           proxy_pass http://web;
       }
    }
    
    iphash 算法能够保证来自同样源地址的请求,都分发到同一台主机
    

    基于请求头的分发

    1)基于host集群(不同虚拟主机)分发
    2)基于开发语言分发
    3)基于浏览器的分发
    4)基于ip
    connection: keep-alived   长连接
    

    1、基于host分发,多集群。两个域名虚拟主机 有各自的集群

    http{
       upstream web1{
           server 192.168.10.42;
       }
       upstream web2{
           server 192.168.10.43;
       }
       server{
           listen 80;
           server_name www.web1.com;
           location / {
               proxy_pass http://web1;
           }
       }
       server{
           listen 80;
           server_name www.web2.com;
           location / {
               proxy_pass http://web2;
           }
       }
    }
    

    2、基于开发语言分发

    http {
       upstream php {
           server 192.168.10.42;
       }
       upstream html {
           server 192.168.10.43;
       }
       server {
           listen 80;
           server_name www.web1.com;
           location ~* .php$ {
               proxy_pass http://php;
           }
    
           location ~* .html$ {
               proxy_pass http://html;
           }
       }
    }
    

    3、基于浏览器分发

    upstream elinks { server 192.168.10.42; }
    upstream chrome { server 192.168.10.43; }
    upstream any { server 192.168.10.42:81; }
    server {
        listen 80;
        server_name www.web1.com;
        location / {
            proxy_pass http://any;
            if ( $http_user_agent ~* Elinks ) {
                proxy_pass http://elinks;
            }
            if ( $http_user_agent ~* chrome ) {
                proxy_pass http://chrome;
            }
        }
    }
    

    4、手机和pc端分开

    ./configure --with-http_geoip_module         # 需要重新编译的模块
    upstream bj.server {
       server 192.168.10.42;
    }
    upstream sh.server {
       server 192.168.10.43;
    }
    upstream default.server {
       server 192.168.10.42:81;
    }
    ​
    geo $geo {            # 匹配属于哪个地方   ip 库
       default default;
        192.168.10.241/32 bj;
        192.168.10.41/32 sh;
    }
    location / {
       proxy_pass http://$geo.server$request_uri;
    }                                  # 防止uri 丢掉
    # http://192.168.10.40/a/b/c/index.php http://192.168.10.42
    

    集群中每个设备的状态设置

    1、down  表示单前的server暂时不参与负载
    2、weight 默认为1 weight越大,负载的权重就越大。
    3、max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回proxynext_upstream模块定义的错误
    4、fall_timeout 失败超时时间,在连接Server时,如果在超时时间之内超过max_fails指定的失败次数,会认为在fail_timeout时间内Server不可用。默认为10s。
    5、backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
    
    示例
    upstream web {
        server 192.168.10.42 max_fails=2 fail_timeout=3;
        server 192.168.10.43 max_fails=2 fail_timeout=3;
    }
    
  • 相关阅读:
    BZOJ1217: [HNOI2003]消防局的设立
    BZOJ3925: [Zjoi2015]地震后的幻想乡
    BZOJ2328: [HNOI2011]赛车游戏
    BZOJ1011: [HNOI2008]遥远的行星
    BZOJ2007: [Noi2010]海拔
    BZOJ1833: [ZJOI2010]count 数字计数
    BZOJ1026: [SCOI2009]windy数
    BZOJ1196: [HNOI2006]公路修建问题
    BZOJ1076: [SCOI2008]奖励关
    BZOJ2752: [HAOI2012]高速公路(road)
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/15166405.html
Copyright © 2020-2023  润新知