Nginx-Cluster 构建
nx-Cluster and ReverseProxyServer
-----------ReProxy-------------------------Client-----------
192.168.56.202 nginx 192.168.56.200 nginx+phpMyAdmin
| 192.168.56.201 nginx
nginx 这个轻量级、高性能的 web server 主要可以干两件事情:
〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
〉另外一个功能就是作为反向代理服务器实现负载均衡
环境:
Nginx反向代理 192.168.56.202
Nginx+php-fpm+MySql 192.168.56.201 index.php-server2
Nginx+php-fpm+MySql 192.168.56.200 index.php-server1 phpMyAdmin
针对不同请求de负载均衡:
a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:
在nginx.conf中修改:
location ~ \.php$ {
proxy_pass http://192.168.56.201:80;
}
测试:http://192.168.56.202/index.php 正常打开server2动态页面
http://192.168.56.202/index.html 正常打开代理服务静态页面
如上是最为简单的使用nginx做为反向代理服务器的例子;
b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
location ^~ /phpmyadmin/ {
proxy_pass http://192.168.56.200:80;
}
location ~ \.php$ {
proxy_pass http://192.168.56.201:80;
}
测试:http://192.168.56.202/index.php 正常打开server2动态页面
http://192.168.56.202/phpmyadmin 正常打开phpMyAdmin页面
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以
http://192.168.56.202/ phpmyadmin 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的nginx服务
器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
因此综上,我们实现了针对不同请求的负载均衡。
〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;
〉如果用户访问index.php页面的话,192.168.56.201:80 的Nginx进行响应;
〉如果用户访问目录phpMyAdmin下的页面的话,192.168.56.200:80 的Nginx进行响应;
3)访问同一页面 的负载均衡:
即用户访问http://192.168.56.202/index.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数
据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
http模块内--定义服务器
upstream myCluster {
server 192.168.56.200:80;
server 192.168.56.201:80;
}
server模块内--定义集群
location ~ \.php$ {
proxy_pass http://myCluster; //于上面cluster定义名称相同
proxy_redirect off;
proxy_set_header Host $host; //返回主机名
proxy_set_header X-Real-IP $remote_addr; //真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //启动转发
}
测试:http://192.168.56.202/index.php 正常打开动态页面,反复刷新页面反复出现Server1及Server2
这样的话,如果访问http://192.168.56.202/index.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服
务区机群中,分别由192.168.56.200:80;或者192.168.56.201:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
upstream myCluster {
server 192.168.56.200:80 weight=5;
server 192.168.56.201:80;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回
给nginx。
通过以上的架构,我们可以实现nginx和Nginx构成的集群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问
index.php代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问
indext.php页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
Nginx-Cluster 构建的更多相关文章
- Haproxy Nginx cluster构建
-----client---------haproxy-------nginx1---------nginx2------192.168.1.250 192.168.1.1 192.168.1.10 ...
- windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...
- 使用Nginx+CppCMS构建高效Web应用服务器
使用Nginx+CppCMS构建高效Web应用服务器 1:Why当前,越来越多的网站使用了各种框架,大部分框架使用了脚本语言.半编译语言等.比如Java.Python.Php.C#.NET等.这些框架 ...
- 使用Nginx+CppCMS构建高效Web应用服务器(之二)
使用Nginx+CppCMS构建高效Web应用服务器(之二) 上一篇 使用Nginx+CppCMS构建高效Web应用服务器(之一) 大致介绍了网站的整体架构,实际上通过调用REST获取数据并没有实现. ...
- 使用Nginx+CppCMS构建高效Web应用服务器(之三)
使用Nginx+CppCMS构建高效Web应用服务器(之三) --充分利用服务器和客户端计算能力 欢迎测试,攻击:http://www.litelottery.com 网页右上角,选择博彩,演 ...
- Nginx|构建简单的文件服务器(mac) 续-FastDFS安装(mac)|文件存储方案
目录 Nginx|构建简单的文件服务器(mac) 1 所需安装包 2 安装fastdfs-nginx-module-master 3 安装Nginx Nginx|构建简单的文件服务器(mac) 续上文 ...
- nginx + lua 构建网站防护waf(一)
最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下 ...
- docker之NGINX镜像构建
Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建ng ...
- Nginx+Tomcat-cluster构建
-----------ReProxy-------------------------Client-----------192.168.56.202 nginx 192.168.56.200 Tomc ...
- nginx+lua构建简单waf网页防火墙
需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...
随机推荐
- 【转】shell之for、while、until循环
一.简介 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于“当型循环”,而unti ...
- Django 组件之 ----- content-type
Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...
- Latex常用软件
Linux texMaker sudo apt-get install texlive-full sudo apt-get install texmaker
- OpenCV__type()返回的数字
OpenCV中的类型以宏定义的形式给出 type_c.h中片段 #define CV_CN_MAX 512 #define CV_CN_SHIFT 3 #define CV_DEPTH_MAX (1 ...
- (一)类数组对象NodeList
NodeList对象的特点: NodeList是一种类数组对象,用于保存一组有序的节点. 可以通过方括号语法来访问NodeList的值,有item方法与length属性. 它并不是Array的实例,没 ...
- jenkins的 git多分支自动构建
一.先做好jenkins和gitlab的webhook自动构建 二.选择哪个分支(我这是test分支) 三.选择build Triggers 四.过滤test分支 五.保存即可
- linux中一些特殊的中文文件不能删除问题
例: [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# ,),(,,' [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# echo "rm -rf ...
- python设计模式第八天【装饰器模式】
1.定义 使用包装的释放扩展类的功能,但是不使用继承 2.使用场景 3.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ def MyDecorat ...
- Java面向对象之多态的静态和动态实现
简单而言: 静态多态:即为重载,方法的重载 动态多态:即为重写/覆盖,方法的重写
- 多IP地址--笔记
多IP 地址特性使虚拟用户可以在一个load generator上运行且被识别为多个IP地址 1 虚拟IP是同一个generator上的多个IP,这种分配过程由controller自动来进行 2 对于 ...