http://www.cnblogs.com/jalja/p/6117881.html

一、反向代理

正向代理:

客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就是正向代理。正向代理的特点:就是我们明确知道要访问哪个网站地址。

反向代理:

客户端想获取服务器集群中(服务1,服务2,服务3 他们的资源相同)中的资源,但是客户端无法与该服务器集群建立连接,但我们可以与另一台服务器(代理服务器)建立连接且该服务器能获取服务器集群中的资源。这个时候客户端就可以通过请求代理服务器,获取想要的资源,但客户端并不知道给他资源的是哪个服务器。这种方式就是反向代理。

二、负载均衡

  当一台服务器的单位时间内的访问量越大的时候,服务器的压力会越大。当一台服务器压力大得超过自身的承受能力的时候,服务器会崩溃。为了避免服务器崩溃,让用户有更好地体验,我们通常通过负载均衡的方式来分担服务器的压力。那么什么是负载均衡呢?我们通过建立很多个服务器,把这些服务器组成一个服务器集群,然后,当用户访问我们网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该选择的服务器。这样,用户的每次访问,都会保证服务器集群中的每个服务器的压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡就是采用反向代理的思想。

三、Nginx中负载均衡的实现

Nginx是一款可以通过反向代理实现负载均衡的服务器,使用Nginx服务实现负载均衡的时候,用户的访问首先会访问到Nginx服务器,然后Nginx服务器再从服务器集群表中选择压力较小的服务器,然后将该访问请求引向该服务器。若服务器集群中的某个服务器崩溃,那么从待选服务器列表中将该服务器删除,也就是说一个服务器假如崩溃了,那么Nginx就肯定不会将访问请求引入该服务器了。

1、创建fzjh.conf配置文件

  在/usr/local/nginx/conf下创建fzjh.conf文件,文件内容如下:

user  nobody;
worker_processes 2;
events {
worker_connections 1024;
}
http{
#=upstream设置负载均衡的待选服务器列表,在运行中如果有服务器崩溃那该服务器就会在该列表中移除
upstream mypro{
server 219.133.55.36;#中国万维网
server 115.239.210.27;#百度的ip
}
server{
listen 8080;
#====== 对ngnix更目录做负载均衡===
location / {
#==选择要代理的服务器要与upstream对应==========
proxy_pass http://mypro;
}
}
}

2、加载fzjh.conf配置文件

 执行命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

3、测试是否成功

  在这里我们的负载均衡待选服务器列表是百度和中国万维网,也就说我们访问我的主机名+8080 就可以进行测试,如果页面在百度与中国万维网中切换,就表示成功。

  我的主机是我的阿里元服务器大家可以试试:http://www.jalja.org:8080

四、Upstream模块详解

Upstream模块:该模块是Nginx服务器的一个重要模块。Upstream模块实现在轮询和客户端ip之间实现后端的负载均衡。常用的指令有ip_hash指令、server指令和upstream指令等。该模块主要进行轮询算法。upstream指令主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询。

ip_hash指令:在负载均衡系统中,假如用户在某台服务器上登录,那么如果该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的一个服务器,那么此时如果将已经登录服务器A的用户再定位到其他服务器,显然不妥。故而,我们可以采用ip_hash指令解决这个问题,如果客户端请求已经访问了服务器A并登录,那么第二次请求的时候,会将该请求通过哈希算法自动定位到该后端服务器中。简单说ip_hash指令可以实现当用户使用同一浏览器在A服务器登录后,那他后续的所有请求都在同一服务器中进行,Nginx代理服务器不会将他的请求分配到其他服务器上,以此规避用户登录信息在不同服务器间流转的问题,从而保证用户只需登录一次。

ip_hash的使用:在fzjh.conf配置文件中开启该功能

server指令: 主要用于指定服务器的名称和参数。

使用:在fzjh.conf配置文件中开启该功能

注意:在实际开发中weight不要与ip_hash同时使用

负载均衡不同实现方式的优缺点:假如使用硬件的方式实现负载均衡,那么中间的转发机构就是硬件,这个时候运行的效率非常高,但是对应的成本也非常高。如果我们采用软件的方式来实现负载均衡,那么中间的转发机构就是软件,这个时候,运行效率不如硬件,但是成本相对来说低得多。而使用Nginx服务器实现负载均衡,那么就是通过软件的方式来实现负载均衡,并且Nginx本身支持高并发等。故而使用Nginx服务器实现负载均衡,能大大节约企业的成本,并且由于Nginx是服务器软件,其执行效率也是非常高。

Nginx负载均衡(转发)的更多相关文章

  1. Nginx负载均衡与转发

    1.6种负载均衡策略 1.轮询 :默认方式 2.weight : 权重方式 3.ip_hash :依据ip分配方式 4.least_conn :最少连接方式 5.fair(第三方) :响应时间方式 6 ...

  2. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  3. nginx负载均衡集群

    nginx负载均衡集群  0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...

  4. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  5. 配置nginx负载均衡

    配置nginx负载均衡 执行命令:vi /usr/local/nginx/sbin/nginx/conf/nginx.conf 修改为: worker_processes  2; events {   ...

  6. Nginx 负载均衡学习

    nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器. nginx负载均衡服务器 tomcat1服务器 tomcat2服务器 1.1   ...

  7. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  8. nginx 负载均衡-- 常用nginx配置

    中文官方网站http://wiki.nginx.org/Chshttp://www.howtocn.org/ --------------------------------------------- ...

  9. nginx 负载均衡相关知识

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

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

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

随机推荐

  1. Eclipse创建一个普通maven项目详细步骤

    首先找到Eclipse最顶部左边的File,new一个 Maven Project项目 下一步,勾选第二个即可 下一步,选择  maven-archetype-webapp Group Id 写域名倒 ...

  2. 发送短信-----用restful 校验规则

    我们的需求如下 1. 获取手机号 . 手机格式校验 . 生成随机验证码 . 验证码发送到手机上 . 把验证码+手机号保留(30s过期) 复习 我们在有表的情况下的序列化 class MessageSe ...

  3. Ubuntu系统配置Zabbix前端及中文乱码解决方案

    Ubuntu系统配置Zabbix前端及中文乱码解决方案  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装zabbix 博主推荐阅读: https://www.cnblogs ...

  4. Mapreduce实例——WordCount

    实验步骤 切换目录到/apps/hadoop/sbin下,启动hadoop. cd /apps/hadoop/sbin ./start-all.sh 2.在linux上,创建一个目录/data/map ...

  5. 2-10 就业课(2.0)-oozie:10、伪分布式环境转换为HA集群环境

    hadoop 的基础环境增强 HA模式 HA是为了保证我们的业务 系统 7 *24 的连续的高可用提出来的一种解决办法,现在hadoop当中的主节点,namenode以及resourceManager ...

  6. 运行jar包中的main方法

    java -classpath jar包名.jar 包名.类名

  7. [Codeforces]1263D Secret Passwords

    题目 One unknown hacker wants to get the admin's password of AtForces testing system, to get problems ...

  8. 深入理解JVM Note

    第2章 Java内存区域与内存溢出异常 运行时数据区域 在虚拟机有栈.堆和方法区. 线程共享的:堆.方法区 不共享的:栈.程序计数器(代码执行的行号) 程序计数器(Program Counter Re ...

  9. gem5-gpu 全系统FS模式 系统调用SE模式

    SE模式中无线程调度器,只能运行单线程程序,如SPEC CPU 2006,仅模拟片上CPU.GPU.Network和DRAM等. FS模式需加载虚拟Linux和磁盘,Linux负责线程调度.实现了Pt ...

  10. 吴裕雄--天生自然java开发常用类库学习笔记:线程的生命周期

    class MyThread implements Runnable{ private boolean flag = true ; // 定义标志位 public void run(){ int i ...