手机游戏
经典单机
角色扮演
休闲益智
动作冒险
射击枪战
赛车竞速
模拟经营
解密闯关
策略战争
手机软件
时尚购物
体育运动
资讯阅读
教育学习
摄影摄像
生活服务
效率办公
聊天社交
视频盒子
其它软件
新闻资讯
游戏攻略
软件教程
游戏问答
软件资讯
软件技术
叨叨念念
网站技术
技术问答
软件教程
资源资料
原创作品
代码学习
网页设计
网络技术
合集
合集
游戏合集
软件合集
资讯合集
视频合集
首页 > 网站技术 > 网站技术

Nginx作为反向代理实现负载均衡

作者:星知苑 时间:2012-11-27 12:32:36

首先简单的介绍下nginx作为反向代理实现负载均衡。

反向代理方式是指以反向代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时反向代理服务器对外就表现为一个服务器。让互联网上的主机通过不同的域名访问不同的内部网主机资源,使内部网主机免受外部网主机攻击,实现负载均衡和缓存功能,很大程度上减轻web服务器的负担提高访问速度。

 

一个简单的Nginx作为反向代理实现负载均衡。[break]

点击查看原图

就如上图所示,我简单的建了一个环境,以3台电脑(windows系统,这里是简单搭建所以用windows,建议还是用linux系统)。

环境介绍如下:

1.Nginx服务器192.168.2.3,安装nginx作为反向代理服务器(80端口)。

2.1台电脑安装nginx+php 192.168.2.2(80端口),作为web服务器1

3.1台电脑安装apache+php 192.168.2.880端口,作为web服务器2

 

(一)针对不同请求的负载均衡。

nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的apache来处理。也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

下面就用个例子来说明一下,分别访问html和php网页,test.html在nginx目录下,test.php在apache目录下。

修改默认的nginx.conf,大概在59~61行,去掉前面的#号,重启nginx。

 

        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
改为
        location ~ .php$ {
            proxy_pass   http://127.0.0.1:8080;
        }
分别访问,出现如下图已经能够针对不同请求访问服务器

 

点击查看原图

这样当我们访问192.168.2.3/index.html的时候,前端的nginx会自动进行响应;当访问192.168.2.3/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置location ~ .php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的,官网文档http://wiki.nginx.org/NginxHttpCoreModule) ,nginx服务器会自动pass给192.168.2.3的apache服务器了。该服务器下的test.php就会被自动解析,然后将test.php的结果页面返回给nginx,然后nginx进行显示。

 

 

实现多个服务器针对不同请求的负载均衡的例子:

访问静态页面test.html最前端的nginx直接进行响应;

访问php页面test.php,192.168.2.3:8080的Apache进行响应;

访问目录phpMyAdmin下的页面的话,192.168.2.2:80 的Apache进行响应

修改原始默认的nginx.conf的server模块部分(大概在59~61行):

        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

修改为

        location ^~ /phpMyAdmin/ {
             proxy_pass 192.168.2.2:80 ; 
        }
        location ~ .php$ { 
             proxy_pass 192.168.2.3:8080 ;
        }

 

上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的URL是以http://192.168.2.3/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到192.168.2.2:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx显示。

 

 

(二)访问同一页面的负载均衡

访问http://192.168.2.3/test.php 这个同一页面的时候,我们实现三台服务器的负载均衡(实际情况中,这两个服务器上的数据要求同步一致)。

 

重新配置nginx.conf,使用默认nginx.conf。

1.首先删除server下的一些配置,大概是36~46行,以下配置行删除。

 

        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

2.在配置文件nginx.conf的http模块中添加服务器集群server cluster的定义。

 

  upstream myCluster { 
       server 192.168.2.3:8080 ; 
       server 192.168.2.2:80 ; 
       server 192.168.2.8:80 ; 
  }

表示这个server cluster包含3台服务器

 

3.然后在server模块中定义负载均衡

 

    location ~ .php$ {
        proxy_pass http://myCluster ; 
        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; 
    }

 

proxy_pass http://myCluster ; 这里的名字和上面的cluster的名字相同

 

配置好后,当访问http://192.168.2.3/test.php 页面,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务器群,分别由上述的3台服务器中的一台来做处理。

点击查看原图

 

 

上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话,可以加weight

  upstream myCluster { 
       server 192.168.2.3:8080 weight=5; 
       server 192.168.2.2:80 ; 
       server 192.168.2.8:80 ; 
  }

 

这样表示5/7的几率访问第一个server,1/7访问第二个、第三个。另外还可以定义max_fails和fail_timeout等参数。

 

所以我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。

nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache服务器来对前台pass过来的动态页面进行处理并返回给nginx。

实际应用中,各个服务器分别保留相同的程序和数据,需要考虑两者的数据同步。

 

良心推荐

军事迷喜欢玩的手机游戏
  • 巅峰战舰游戏下载
  • 火力全开2城市狂热破解版下载
  • 消防战场游戏安卓版
  • 幸存绿洲突围单机版
  • 战舰激斗破解版无限火力
  • 二战生存射击游戏汉化版下载
说道军事题材的游戏小编可以给你说个三天三夜,在现在的游戏中往往都是军事题材的类型手游游戏是让很多的玩家喜欢的,像是吃鸡这游戏都是知道的,但是在小编看来还不够逼真,那么现在就在这里给你整理了推荐很多的都是在游戏的画面上来看能够让每个玩家都是身临其境的感觉,炮火连天的震撼感受。

相关资讯