zoukankan      html  css  js  c++  java
  • nginx 负载均衡(默认算法)

    使用 nginx 的upstream模块只需要几步就可以实现一个负载均衡;

    在 nginx 配置文件中添加两个server

    server {
            listen 81;
            server_name 192.168.1.129;
            root /var/www/html1;
    }
    
    server {
            listen 82;
            server_name 192.168.1.129;
            root /var/www/html2;
    }

    使用upstream把这两个 server 绑定到一个负载sever上提供统一入口;

    upstream myservers {
            server 192.168.1.129:81 weight=1 max_fails=2 fail_timeout=3;
            server 192.168.1.129:82 weight=1 max_fails=2 fail_timeout=3;
    }

    weight  是权重  max_fails 请求多少次失败后把这台服务器标记为失效   fail_timeout  请求超时时间  更多参数可以通过nginx官方文档查看;

    server {
            listen 80;
            server_name 192.168.1.129;
            location / {
                    index index.html;
                    proxy_pass http://myservers;
            }
    }

    在 /var/www/html1/  和/var/www/html2下分别建立index.html 文件  内容分别为   html111 ,  html2222;

    然后重启nginx,访问  192.168.1.129   浏览器会显示  html111和html222交替变换,两个内容的出现概率和权重有关;

     这里有两个问题:

    用户访问过程中是先到达 192.168.1.129:80 然后被均匀转发给 81和82端口,如果你在81端口中的php代码里面获取  remote_addr会

    发现是 192.168.1.129而不用户的地址,也就是说81和82就收到的远程信息是 81和82前面的代理服务器的,用户的真实信息被丢掉了;

    解决办法:  如果通过apt方式安装的nginx 在 /etc/nginx/proxy_params  中会有几个例子参考;

    通过  proxy_set_header  可以设置相关头信息

    server {
            listen 80;
            server_name 192.168.1.129;
            location / {
                    index index.html;
                    proxy_set_header Host $http_host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_pass http://myservers;
            }
    }

    这样在81/82端口收到的remote就是我们设置真实ip地址了;

    还有个问题:在处理带状态的情况下 这种方式是不可行的,比如用户发送登录请求到82端口,82

    端口保存了用户的登录session数据,但是当用户请求主页时,又被随机转发到81端口去了,81端口的后台根本就没有用户的session状态;

    于是告诉用户你没有登录;

    目前想到有两个办法:

    (1)改变nginx的负载均衡算法,改为一致性哈希,可以根据用户ip地址来决定 该去访问那个端口,只要用户ip地址不变,就始终会被转发到指定端口;

    (2)服务器不保存用户状态,用户每次请求附带状态信息

    第一种方式还存在一个缺陷,比如用户用手机流量登录了系统,然后进入wifi环境,ip地址就变了,状态又会失效。第二种方式更适应性更加广泛;而且更适合做

    restful 接口;

  • 相关阅读:
    OpenCV 实现图像拼接例子
    XML 可扩展标记语言
    XML和YAML的区别与使用方法
    OpenCV 感兴趣区域ROI和logo添加技术
    OpenCV 详解掩膜mask
    OpenCV 读写xml和yml文件
    OpenCV 如何生成能在无OpenCV环境下运行的exe
    OpenCV 图像拼接和图像融合技术
    OpenCV 特征检测和特征匹配方法汇总
    OpenCV 图像矫正技术深入探讨
  • 原文地址:https://www.cnblogs.com/codeAB/p/6509200.html
Copyright © 2011-2022 走看看