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


           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等均可以。


  • 相关阅读:
    Unity异步加载场景loading条
    (转)Unity3D命令行Build
    (转)Unity3d UnityEditor编辑器定制和开发插件
    (转)U3D不同平台载入XML文件的方法——IOS MAC Android
    Unity3D中的欧拉角的理解
    (转)在ios android设备上使用 Protobuf (使用dll方式)
    (转)[原创]在ios android设备上使用 Protobuf (使用源码方式)
    (转)欧拉角与万向节死锁
    (转) unity 在移动平台中,文件操作路径详解
    微信小程序四(设置底部导航)
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/6565517.html
Copyright © 2020-2023  润新知