大家都知道。一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置)。而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢?

相信非常多人会有与我相同的疑惑,但实际上成熟的解决方式已经大规模投入使用。而经常使用的则是反向代理方法。

反向代理(Reverse Proxy)方式是指以代理server来接受internet上的连接请求,然后将请求转发给内部网络上的server。并将从server上得到的结果返回给internet上请求连接的client,此时代理server对外就表现为一个server。基本结构能够例如以下图所看到的:

从此图能够看出,用户訪问的webserver实际上是一个代理server,而真正处理内容(等一系列复杂操作)都是由墙内的server完毕的。这不仅减轻了代理server的压力。同一时候也能够使墙内server与客户机隔离。防止一些安全问题的发生。此时,仅仅须要添加墙内server。用户尽管訪问的是同一地址,但可能訪问的实际server会全然不一样。

以上仅仅是一些理论。怎样实现呢?採用Nginx能够轻松完毕这一功能。

1、首先,(For Windows)下载Nginx  http://nginx.org/en/download.html。软件大小与软件本身都是一款超轻量级的东西。能够说差点儿感觉不到它的存在

当然首先简单了解一下Nginx是什么 。

Nginx ("engine
x") 是一款高性能的,轻量级的HTTP Web server
和 反向代理server及电子邮件 IMAP/POP3/SMTP 代理server。

首先它是一款Webserver,又是一款性能优秀的反向代理server

下载完毕之后、解压,直接打开nginx.exe能够直接执行nginxserver。此时浏览器输入localhost能够看到界面。

2、配置文件。

conf/nginx.conf

默认的配置例如以下。能够简单看一下

#user  nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
}

总体配置与apache略相似,假设开发的时候,能够打开相关log參数,error_log和access_log就可以。server内的内容显示,定义了一个服务器,监听80port,位置为/html/*。主页为index.html,并将50X错误重定向到50x.html。

也能够定义virtualhost。并将位置定位到其它path。

3、不同地址的代理。

nginx能够实现对不同地址的反向代理(这里并不是指不同IP或者域名地址,而是路径),比如希望将全部显示部分(/view/xxx)的交给Aserver,地址为x.x.x.101。逻辑处理部分(/control/xxx)交给Bserver。地址为x.x.x.102。能够加入例如以下配置

location ~ \/view/[\S]+.php$ {
proxy_pass http://x.x.x.101;
} location ~ \/control/[\S]+.php$ {
proxy_pass http://x.x.x.102;
}

~表示採用正則表達式匹配,若在location后加入^~表示不以正则式匹配,上面配置将全部/view/*.php的请求交给了http://x.x.x.101,而/control/*.php的请求交给了http://x.x.x.102。在逻辑上实现代理与分离。

当然在A、Bserver上,能够构建各自须要的如Apacheserver或Tomcat甚至NodeJS

4、同地址负载均衡。

假设是同一地址的并发訪问量巨大。须要进行负载均衡。比如某一抢购页面或者某一类页面。能够加入例如以下配置定义一个WEBserver集群:

upstream webCluster{
server x.x.x.101;
server x.x.x.102;
server x.x.x.103;
server x.x.x.104;
#...能够加入很多其它服务器
}

同一时候。给该集群配置一个location,方法同上:

location ~ \/views/[\S]+php$

proxy_pass http://webCluster ;
proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

此时再訪问/views下的全部文件夹,都会被平均分配到集群中的全部机器上。

这里的集群中全部地址并无权重,默认weight=1,当然也能够自己定义权重,让一些处理能力高的server得到很多其它的请求:

upstream webCluster{
server x.x.x.101  weight=2;
server x.x.x.102;
server x.x.x.103;
server x.x.x.104;
#...能够加入很多其它服务器
}

这样一共weight = 5,101服务器会有2/5的权重,其它为1/5。

以上则是大型站点在WEB端的负载均衡的实现,该实现方法最为便宜和高效。当然。还有非常多其它实现负载均衡的方法,比如使用一些大型硬件进行IP重定向等等。



利用Nginx构建负载均衡server的更多相关文章

  1. liunx 利用nginx 实现负载均衡

    一般采用软件实现负载均衡的有Nginx.apache.nginx 近年来使用频繁,其官网上面显示可以承载5万并发访问量,太牛了. nginx 相比 apache优势明显:Nginx 服务程序比较稳定, ...

  2. 若依项目利用nginx实现负载均衡及保持会话

    记录一下若依项目利用nginx实现负载均衡及保持会话的步骤. 此次作为试验性的测试,为了方便在本地window的环境上实现. 具体步骤: 1.安装两个tomcat8,可以下载一个后,另一个复制即可,下 ...

  3. [转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

    利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha ...

  4. 如何利用nginx实现负载均衡(总结)

    如何利用nginx实现负载均衡(总结) 一.总结 一句话总结: 推荐使用nginx七层(应用层)负载均衡的实现:配置那是相当的简单 1.nginx配置实例? |||-begin #这里的域名要和下面p ...

  5. Linux下利用nginx实现负载均衡

    linux下利用nginx实现负载均衡 前提条件: 1,安装好jdk 2,安装好tomcat和nginx(可以参考我前两篇文章) 满足前提条件后,要用nginx实现负载均衡,主要是靠配置nginx的配 ...

  6. 利用nginx实现负载均衡和动静分离

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

  7. 利用nginx实现负载均衡

    1.安装nginx和tomcat 我这里是使用docker安装的.安装流程可参照 dockerfile 这里安装了两个tomcat,端口分别是42000和42001.第二个tomcat的首页随便加了些 ...

  8. 利用nginx做负载均衡

    round-robin:轮询.以轮询方式将请求分配到不同服务器上,默认 least-connected:最少连接数.将下一个请求分配到连接数最少的那台服务器上 ip-hash :基于客户端的IP地址. ...

  9. windows平台下利用Nginx做负载均衡

    1.下载nginx(http://nginx.org/en/download.html)安装包,解压,并使用cmd命令转到nginx.exe所在的目录 2.执行cmd命令start nginx启动ng ...

随机推荐

  1. Apple iOS MDM开发流程

    一年前曾参与过中石油的一个移动平台项目,实现了通过MDM对iOS设备进行管理.由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享,并没有对具体实现的文档进行公开,所以这方面的资料非常少. ...

  2. 一起talk GDB吧(第六回:GDB改动程序执行环境)

    各位看官们,大家好,上一回中我们说的是GDB查看信息的功能,而且说了怎样使用GDB查看程序执行时的 信息.这一回中,我们继续介绍GDB的调试功能:改动程序执行环境.当然了,我们也会介绍怎样使用GDB ...

  3. Beautiful Soup 中文文档

    Beautiful Soup 3.0 中文文档说明: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html Be ...

  4. 几个前端博客 good

    http://www.cnblogs.com/JustinYoung/archive/2011/02/24/fresh-free-html-templates-2010.html http://www ...

  5. uva 816 BFS求最短路的经典问题……

    一开始情况没有考虑周全,直接WA掉了, 然后用fgets()出现了WA,给改成scanf就AC了 题目不是很难,用心就好…… #include <iostream> #include &l ...

  6. android图片压缩的3种方法实例

    android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...

  7. Trufun云端建模平台之云端UML工具发布

    Trufun云端建模平台包括云端UML工具,云端BPMN工具,云端思维导图工具. 云端UML工具是目前最先进的基于HTML5的UML2.x建模工具,所有代码基于JAVA开发,支持类图.用例图.活动图. ...

  8. Redis util

    主要是字符串通配符匹配和数字与字符串互转的几个函数. // 通配符模式匹配 int stringmatchlen(const char* p, int plen, const char* s, int ...

  9. 做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)

    做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个butt ...

  10. oracle实现远程连接超简单;枚举与剪枝();PowerDesigner生成数据库代码注意里面的双引號,应该去掉

    点击開始,查看netManager,点击面板的监听程序,默认仅仅有地址1且标记着localhost.新建一个地址,输入本机IP,又一次开启监听程序就可以 △△△ * △△ = △△△△ 某3位数乘以2 ...