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

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

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

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

upstream myservers {
server 192.168.1.129: weight= max_fails= fail_timeout=;
server 192.168.1.129: weight= max_fails= fail_timeout=;
}

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

server {
listen ;
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 ;
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 接口;

nginx 负载均衡(默认算法)的更多相关文章

  1. 面试题:Nginx负载均衡的算法怎么实现的?为什么要做动静分离?

    面试题 Nginx负载均衡的算法怎么实现的?Nginx 有哪些负载均衡策略?Nginx为什么要做动静分离? 面试官心理剖析 主要是看应聘人员对Nginx的基本原理是否熟悉,需要应聘人员能够根据实际业务 ...

  2. Nginx 负载均衡一致性算法

    一般Hash负载算法都是%算法 比如key-5 如果有5台服务器 那么5%5=0  那么请求将落在server 0 上,当有服务器宕机或者添加新服务器时,hash算法会引发大量路由更改,可能导致缓存大 ...

  3. nginx负载均衡中常见的算法及原理有哪些?

    一.nginx负载均衡常用算法 1.1 轮询 轮询,nginx默认方式.一次将请求分配给各个后台服务器. upstream backserver { server 10.0.0.7; server 1 ...

  4. Load Balancing with NGINX 负载均衡算法

    Using nginx as HTTP load balancer Using nginx as HTTP load balancer http://nginx.org/en/docs/http/lo ...

  5. Nginx 负载均衡算法

    Nginx 负载均衡算法 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响. upstream tomcat_server { ...

  6. Nginx负载均衡的max_fails和fail_timeout的默认配置问题

    今天发现一个奇怪的现象,前端请求后端服务多次后会超时一次,经过多次验证确定是大概10s左右就会超时一次,检查后端服务,发现其中一个节点已经夯死. 但是我们的nginx负载均衡策略是轮询机制,按照配置来 ...

  7. 解析nginx负载均衡

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/1033718 ...

  8. nginx 负载均衡相关知识

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...

  9. Nginx 负载均衡-加权轮询策略剖析

    本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...

  10. 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

随机推荐

  1. robotframework的字符类型转换,用Evaluate来转换

    ${b} BuiltIn.Set Variable 1.1 ${c}= BuiltIn.Evaluate float(${b}) ${d}= BuiltIn.Evaluate ${c}+2.2 1.有 ...

  2. 5239-回忆京都-洛谷3月赛gg祭

    传送门 题目背景 第十五届东方人气投票 音乐部门 106名 第四次国内不知道东方的人对东方原曲的投票调查 51名 回忆京都副歌我tm吹爆,东方文花帖我tm吹爆! 题目描述 射命丸文在取材中发现了一个好 ...

  3. Ionic1 环境破坏后程序重新恢复过程

    ionic platform remove android ionic platform add android cordova plugin add cordova-plugin-network-i ...

  4. 多线程-Callable、Future、FutureTask

    我们普遍知道的创建线程的方式有两种,一种是继承Thread,一种是实现Runnable接口.这两种方式都无法获取任务执行完后的结果,并发包提供了Callable 类能够得到任务执行完的结果. 为何需要 ...

  5. LeetCode 965. Univalued Binary Tree

    A binary tree is univalued if every node in the tree has the same value. Return true if and only if ...

  6. php 简单的学习GD库绘制图片并传回给前端实现方式

    1.基本的GD库绘制图片汇总 2.后台实现小案例 <?php // $img = imagecreatetruecolor(200,40); // var_dump($img); // 利用GD ...

  7. 漫谈数组去重复方法(亮点是ES6的新API)

    方法1: 利用遍历的思想来进行. <!DOCTYPE html><html lang="en"><head> <meta charset= ...

  8. 实时采集新加坡交易所A50指数

    http://www.investing.com/indices/ftse-china-a50 前段时间有人问我如何得到这个网页的实时指数变化,经过抓包发现该网站提供的指数实时变化是通过Websock ...

  9. Springboot+Redis 配置和使用

    pom.xml 引入redis 开启缓存 <!-- cache --> <dependency> <groupId>org.springframework.boot ...

  10. 关于iframe页面里的重定向问题

    最近公司做的一个功能,使用了iframe,父页面内嵌子页面,里面的坑还挺多的,上次其实就遇到过,只不过今天在此描述一下. 请允许我画个草图: 外层大圈是父级页面,里层是子级页面,我们是在父级引用子级页 ...