一、什么是负载均衡和反向代理

随着网站访问量的快速增长,单台服务器已经无法承担大量用户的并发访问,必须釆用多台服务器协同工作,以提高计算机系统的处理能力和计算强度,满足当前业务量的需求。而如何在完成同样功能的多个网络设备之间实现合理的业务量分配,使之不会出现一台设备过忙、而其他 的设备却没有充分使用的情况。要解决这一问题,可以釆用负载均衡的方法。 .

二、负载均衡

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地 位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来 的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请 求。均衡负载能够平均分配客户请求到服务器阵列,藉此快速获取重要数据,解决大量并发访问 .服务问题。这种群集技术可以用最少的投资获得接近于大型主机的性能。

Nginx负载均衡之upstream分配方式介绍

Nginx的upstream支持5种分配方式,下面将会详细介绍,其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式:

1、轮询

轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

upstream backend {
server 192.168.1.101:;
server 192.168.1.102:;
server 192.168.1.103:;
}

2、weight

轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。

upstream backend {
server 192.168.1.101 weight=;
server 192.168.1.102 weight=;
server 192.168.1.103 weight=;
}

3、ip_hash

每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。

upstream backend {
ip_hash;
server 192.168.1.101:;
server 192.168.1.102:;
server 192.168.1.103:;
}

4、fair

fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。

upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
fair;
}

5、url_hash

与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
hash $request_uri;
hash_method crc32;
}

其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

三、反向代理

反向代理(Reverse Proxy)是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此 时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器, 并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并 不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务 器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服 务器没有保存任何网页的真实数据,所有的静态网页或CGI程序,都保存在内部的Web服务器上。 因此对反向代理服务器的攻击并不会使网页信息遭到破坏,这样就增强了 Web菔务器的安全性。

反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种 方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访 问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

四、常见的Web负载均衡方法

Web负载均衡的方法有很多,下面介绍几种常见的负载均衡方式。

常见的web负载均衡方法总结

五、Nginx负载均衡与反向代理配置实例

环境准备

在服务器192.168.3.43上准备两台tomcat server,端口分别是8080和8082

通过访问不同的域名访问运行在tomcat不同端口的服务器,中间使用nginx反向代理服务器

8080.zcinfo.com 访问运行8080端口的tomcat

8082.zcinfo.com 访问运行8081端口的tomcat

反向代理示例

   upstream tomcatserver1 {
server 192.168.3.43:;
}
upstream tomcatserver2 {
server 192.168.3.43:;
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver2;
index index.html index.htm;
}
}
测试
 
恭喜,nginx反向代理成功。

负载均衡配置

  upstream tomcatserver1 {
server 192.168.3.43:;
server 192.168.3.43:; #多加了此台服务器
 }
upstream tomcatserver2 {
server 192.168.3.43:;
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver2;
index index.html index.htm;
}
}

如果两台服务器性能差不多这样设置重启nginx就行了,但是现在假如两台服务器性能不一样,还需要设置性能权重,让性能高服务器做更多事情。只需要加入weight=?就行了,如下:

upstream tomcatserver1 {
server 192.168.3.43: weight=;
server 192.168.3.43: weight=;
}
upstream tomcatserver2 {
server 192.168.3.43:;
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
server {
listen ;
server_name .zcinfo.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcatserver2;
index index.html index.htm;
}
}

重新启动nginx,会发现8080出现了两次,8082出现一次这样轮循。

ps:关于nginx负载均衡的一些参数介绍例子

节点说明:
在http节点里添加: #定义负载均衡设备的 Ip及设备状态
upstream myServer { server 127.0.0.1: down;
server 127.0.0.1: weight=;
server 127.0.0.1:;
server 127.0.0.1: backup;
} 在需要使用负载的Server节点下添加 proxy_pass http://myServer; upstream 每个设备的状态: down 表示当前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

测试

恭喜,nginx反向代理和负载均衡搭建成功。

更多参阅:Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案

Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化的更多相关文章

  1. Nginx HTTP负载均衡和反向代理的配置与优化

    一.什么是负载均衡和反向代理 1.负载均衡 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器具有等价的地位,都可以单独提供服务而无需其他服务的辅助.通过某种负载分担技术,将外部发送来的 ...

  2. Nginx负载均衡和反向代理的配置和优化

    负载均衡 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位, 反向代理 是指以代理服务器来接受internet上的请求,然后将请求转给内部的服务器 常见的负载均衡 1. ...

  3. Nginx负载均衡与反向代理的配置实例

    user www www; worker_processes 10; error_log /data1/logs/nginx_error.log crit; pid /usr/local/webser ...

  4. CentOS中实现Nginx负载均衡和反向代理

    一.安装必要软件 负载均衡服务器:IP设置为192.168.1.10 Web服务器1:安装Apache或者Nginx,IP设置为192.168.1.11: Web服务器2:安装Apache或者Ngin ...

  5. nginx负载均衡和反向代理有什么区别

    近在研究nginx的负载均衡和反向代理,先看下这两个简单的配置吧! 负载均衡 worker_processes 1; events { worker_connections 1024; } http{ ...

  6. Nginx 负载均衡和反向代理实践

    nginx 以哪个配置文件启动 Nginx 负载均衡和反向代理实践 环境介绍 192.168.1.50    在这台主机上配置Nginx 的反向代理,负载均衡,和web1,web1使用的81号端口 1 ...

  7. 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》

    本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...

  8. Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。

    Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛. 用Nginx+Lua(OpenResty)开发高性能Web ...

  9. Nginx 之负载均衡与反向代理

    负载均衡服务器策略: 1.轮循  每个请求逐个分发到后端服务器 2.加权轮循  按照分配的权重将请求分发到后端服务器 3.ip hash 轮询的基础上,保持一个客户端多次请求分发到一台后端服务器上 一 ...

随机推荐

  1. sell 项目 订单表 设计 及 创建

    1.数据库设计 2.订单表 创建 /** * 订单表 */ create table `order_master` ( `order_id` varchar(32) not null, `buyer_ ...

  2. http put post请求区别

    1.RESTful API REST: Representational State Transfer url 对应服务器上的一种资源,e.g. 数据,图片等,所以url 中只含有名词,通过HTTP动 ...

  3. SpringMVC学习笔记三:拦截器

    一:拦截器工作原理 类比Struts2的拦截器,通过拦截器可以实现在调用controller的方法前.后进行一些操作. 二:拦截器实现 1:实现拦截器类 实现HandlerInterceptor 接口 ...

  4. Java并发容器之阻塞队列BlockingQueue

    BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满:从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空. Bloc ...

  5. 【Java多线程】线程同步方法概览

    一:使用syncrhoized内置锁实现同步 使用互斥来实现线程间的同步,保证共享数据在同一时刻只被一个线程使用.Java中最基本的互斥手段就是syncrhoized关键字. syncrhoized的 ...

  6. CentOS6.x 图形界面(gnome)安装

    CentOS6默认的安装选项 Desktop :基本的桌面系统,包括常用的桌面软件,如文档查看工具. Minimal Desktop :基本的桌面系统,包含的软件更少. Minimal :基本的系统, ...

  7. C# WinForm中NotifyICon控件的用法

    参考:http://blog.csdn.net/paullink520/article/details/14170021 http://www.cnblogs.com/webman/archive/2 ...

  8. Tomcat默认界面可导致版本信息泄露+管理后台爆破

    由于配置的Tomcat时,管理页面未进行删除或者权限角色配置,攻击者可以通过暴力猜解进入到管理后台,从而上传获取shell. Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到 ...

  9. 利用Git进行团队协作

    前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...

  10. T-Sql常用语句

    1.用bcp导出txt数据 DECLARE ), ) BEGIN , ), '/', '-'); SET @bcp = 'bcp WebStat.dbo.[PV_HIS_' + @date + '] ...