Nginx负载均衡:分布式/热备Web Server的搭建-阿里云开发者社区

开发者社区> 好1234> 正文

Nginx负载均衡:分布式/热备Web Server的搭建

简介:        Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。
+关注继续查看

       Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

      

        Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。

       在一些大型的项目中,Nginx经常是用作负载均衡的,Nginx将请求按照一定的规律分发给分布式的Web Server,这样可以解决Web Server是项目性能瓶颈的问题,这样便构成了LNMPA架构,即Linux+Nginx+Mysql+PHP+Apache,有同样功能的还有LVS,但是各有优缺点,最好的是F5硬件,但是价格非常昂贵;同时Nginx也非常适合处理静态页面,文件上传与下载的服务器,在这些业务上,其他服务器软件是无法比拟的;其实现在有很多项目就直接用Nginx作Web 服务器,Nginx做Web 服务器在处理PHP业务逻辑上可以没有Apache那么强大,假如单独用Nginx不能满足您项目的需要,那就把业务分离开,Nginx做负载均衡,处理静态页,负责文件上传下载,PHP业务逻辑交给Apache。


        Nginx最好安装在Linux系统上,因为在Linux下可以让Nginx达到预期的性能,的安装方法可以参见:

        http://blog.csdn.net/jhq0113/article/details/43812895


         反向代理与负载均衡配置:

         Web Server1:       192.168.1.16:80              Nginx

         Web Server2:       192.168.1.16:8080          Nginx

        临  时  域  名:      yii.nginx.com           

         Nginx Server:        192.168.1.18:80            


        本地只有两台机器,所以Web Server就都放在192.168.1.16上了,到真实环境下,配置类似,真实环境下只是Web Server的IP不同,PHP程序相同,这里为了演示区分,Web Server配置不同的PHP程序。


        1.在192.168.1.16 Nginx配置

user  www;           #运行用户
worker_processes  1; #工作进程数量,最好是CPU核心数量

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;            #编码,最好指定
    sendfile        on;
    keepalive_timeout  65;

    #######################myphp8080.com配置#########################
    server{
        listen       8080;#监听8080端口
        server_name  myphp8080.com;
        root /home/data/web/php/myphp8080.com;  #web目录
        location / {
             index index.php index.html index.htm;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

#######################myphp80.com配置#########################
    server {
        listen       80;
        server_name myphp80.com
        root /home/data/web/php/myphp80.com; 
        location / {  
           index index.php index.html index.htm; 
        } 
        location ~ \.php$ { 
             fastcgi_pass 127.0.0.1:9000; 
             fastcgi_index index.php; 
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
             include fastcgi_params; 
        } 
     }

 } 


    2.192.168.1.16 在web目录下分别创建myphp80.com和myphp8080.com目录,各自目录分别创建index.php文件,php代码分别为:

      myphp80.com目录中index.php代码:

<?php
   echo json_encode(['type'=>'200','data'=>'80']);
?>

       myphp8080目录中index.php代码:

<?php
   echo json_encode(['type'=>'200','data'=>'8080']);
?>


       将两个目录权限交给www组www用户:

       [root@jhq0113 php]# chown -R www:www myphp80.com/

       [root@jhq0113 php]# chown -R www:www myphp8080.com/

     

       然后,重启Nginx服务

       [root@jhq0113 php]# service nginx restart


      

       3.防火墙开放80和8080端口,开发方法也是参见Nginx安装方法那篇博客,然后在浏览器中进行访问测试,检查配置是否成功,测试结果如下:

                                   


         4.192.168.1.18 Nginx服务器反向代理与负载均衡配置:

######################yii.nginx.com反向代理负载均衡#########################
    #负载均衡配置,以权重方式分发
    upstream yii.nginx.com {
       server 192.168.1.16:80 weight=5;
       server 192.168.1.16:8080 weight=5;
    }

   #反向代理配置
   server {
     listen       80;
     server_name  yii.nginx.com;
     charset utf-8;
     location /{
        proxy_pass http://yii.nginx.com;
     }
  }


        重启Nginx服务

        [root@jhq0229 php]# service nginx restart


        5.本地域名,浏览器端需要配置hosts,配置hosts方法去网上找吧,很简单,在hosts文件中添加

         192.168.1.18 yii.nginx.com


        6.浏览器端访问yii.nginx.com,多访问几次,这样我们就可以看到,会按照权重更换显示80端口和8080端口的内容。


        至此,Nginx负载均衡、反向代理配置完毕。


        Nginx负载均衡的分发方式有4种:

        1.轮询,默认采取此方式,Nginx会按照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将其摘掉。

        2.weight,权重,即轮询的几率,值越大,被分发的可能性越大,用于后端服务器性能不均的情况。

        3.ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决共享session的问题。

        4.自定义规则


       举例:

upstream myphp.com {   
     server 192.168.1.16:80 down;
     server 192.168.1.18:80 weight=2;
     server 192.168.1.13:80;
     server 192.168.1.12:80 backup;
}

      配置详解:

         down 表示当前的Web Server暂时不参与负载
         weight  默认为1.weight越大,负载的权重就越大。
         backup: 其它所有的非backup Server down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

     

      backup是利用nginx的热备功能,这也是最典型的应用带来的重要好处之一,当非backup Server能够很好的为Client提供服务的时候,backup Server不对外界提供服务,此时backup Server处于冷状态;当所有非backup Server不能很好的为Client提供服务的时候,backup Server为Client提供服务,做到了热备,某台或者所有非backup Web Server宕机不会影响整个Web项目的访问功能,Web项目仍然可以为Client提供服务


       Nginx做负载均衡,对Web Server的操作系统和语言环境没有特殊要求,Web Server的操作系统可以是Linux也可以是Windows Server,Web程序是Java、PHP、Asp.Net等均可以。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
解读OpenMessaging开源项目,阿里巴巴发起首个分布式消息领域的国际标准
OpenMessaging项目由阿里巴巴发起,与雅虎、滴滴出行、Streamlio公司共同参与创立,项目意在创立厂商无关、平台无关的分布式消息及流处理领域的应用开发标准。据发起人介绍,随着标准的不断演进,会有更多的互联网、云计算厂商参与到该项目以及生态体系中来。
11093 0
快速搭建基于 Serverless 的 .NET Core 数据库应用
快速搭建基于 Serverless 的 .NET Core 数据库应用 简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
20046 0
Nginx负载均衡配置实例详解
负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
856 0
java编程—如何搭建Keepalived+Nginx+Tomcat高可用负载均衡架构
一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量,需要进行服务集群化部署,本文主要介绍服务端Tomcat多实例部署,以及如何保证web服务的高可用方案。
1591 0
使用http-server搭建静态文件服务器
本文介绍几种搭建静态文件服务器的方式,着重介绍基于node的http-server用法。
1795 0
急速搭建 Serverless AI 应用:为你写诗
AI model serving 是函数计算一个比较典型的应用场景。数据科学家训练好模型以后往往需要找软件工程师把模型变成系统或者服务,通常把这个过程称之为 model serving。函数计算无需运维和弹性伸缩的特性,正好符合数据科学家对高可用分布式系统的诉求。本文将介绍把一个 TensorFlow CharRNN 训练的自动写五言绝句古诗的模型部署到函数计算的例子。
1285 0
+关注
好1234
在PHP技术圈摸爬滚打四五载,经历了高并发、大数据项目的各种坑,不断的在坑中打磨成长。热衷技术领域:Yii2 、 Mysql 、Redis 、ElasticSearch 、Nginx、设计模式、分布式存储、分布式编程,对面向对象编程有比较独到的见解,重视团队协作。
96
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载