使用 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. javascript之传输加密

    为什么要使用javascript加密呢?服务端加密远远不够,客户端或者浏览器端也需要加密,以此保证传输信息过程的安全. 今天就我工作中说说这么几种加密算法及其对应的应用场景,如下所示: base64 ...

  2. js超时处理

    var now = new Date(); var exitTime = now.getTime() + numberMillis; //numberMillis毫秒超时参数 while (true) ...

  3. input表单提交完毕,返回重新填入有黄色背景,和 历史记录 清除

    <input autocomplete="value"> // 添加这个属性,可以解决然后添加一个css input:-webkit-autofill {box-sha ...

  4. UOJ236 IOI2016 Railroad 差分、欧拉回路、最小生成树

    传送门 将"进入路段时速度\(\leq s_i\)"转换为:"进入路段时速度恰好等于\(s_i\),并且铺设铁轨有加速和减速两种,加速无需代价,减速每\(1 km/h\) ...

  5. 如何备份和恢复你的TFS服务器(三)

    进行一次备份 当然,如果你已经建立了一个时间表,那么备份会在指定的时间自动地进行,但是我真的无法给你展示一张很酷的截图——那是不可见的:).无论你是否建立了一个时间表.你都可以在任意时间执行一次完整的 ...

  6. 腾讯首批 5000 人群,现在加入【FineUI总群】,极速体验!

    腾讯首批 5000 人群,稀缺资源,绝无仅有,快来体验! 加群链接:http://shang.qq.com/wpa/qunwpa?idkey=e81f012f9920c25a77c4fd8b0c767 ...

  7. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  8. Windows 10 配置Linux及安装Docker

    https://baijiahao.baidu.com/s?id=1607159570058814753&wfr=spider&for=pc https://blog.csdn.net ...

  9. hibernate多对多 一对多 及简单入门 主键生成策略

    Hibernate简单使用 入门 通过hibernate的 一对多 多对多轻松看懂hibernate配置 (不使用注解) hibernate对jdbc访问数据库的代码进行轻量级封装,简化重复代码 减少 ...

  10. Mixing x86 with x64 code (混合编写x86和x64代码)

    几个月前我小小的研究了在WOW64下的32位进程中运行native x64代码. 第二个设想是在64位进程下运行x86代码.它们都是可以的,如我google的一样, 已经有人在使用这两种方法了: ht ...