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

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

二、负载均衡

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

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. px 和 em 的区别

    相同点:px和em都是长度单位: 异同点:px的值是固定的,指定是多少就是多少,计算比较容易.em得值不是固定的,并且em会继承父级元素的字体大小.浏览器的默认字体高都是16px.所以未经调整的浏览器 ...

  2. SWF运行时判断两个DisplayObject是否同个类型,属于flash professional库中的同一个元件

    一般我们判断两个实例对象是否同样的类型,可以用typeof得到对象类型,然后用==号比较. typeof适用于原生类型. 而对于自定义类型,虽然typeof得到的都是Object,但还有更强的招数:g ...

  3. 〖Linux〗让Kubuntu的“启动栏”与Win7“任务栏”的界面和功能一样

    先来展示一下我的桌面效果图: === 是否发现这与Windows 7任务栏非常相似?哈哈- === 背景: 玩久了Unity,想换个品味,就把Ubuntu安装了KDE桌面,发现甚是不错: 这里教大家怎 ...

  4. JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类

    public static void main(String[] args) { //长度是2说明是英文/数字/英文状态下的字符,长度为4说明是汉字/中文状态下的字符 String str = &qu ...

  5. 转 安装Nginx 1.2.0+PHP 5.4.3(FastCGI)+MySQL 5.5.24

    硬件环境:Dell PowerEdge 1950,4核Intel(R) Xeon(R) CPU E5410  @ 2.33GHz4G内存 系统环境:CentOS release 5.2,内核版本: 2 ...

  6. Android从无知到有知——NO.3

    昨天看了下几种常见的布局,类似于曾经学的html.关于css+div没有接触太多,但这几种布局都比較简单.仅仅要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最经常使用的.前边做的& ...

  7. Kafka流处理平台

    1. Kafka简介 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性 ...

  8. ios中地图定位

    #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController ...

  9. java实现https ssl请求url

    import java.io.*;import java.net.*;import java.security.*;import java.security.cert.*;import java.ut ...

  10. HttpClient库设置超时

    HttpClient库API跟Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样. 3.X是正常的Java语法 HttpCli ...