Nginx均衡负载配置详解

      由于公司最近平台的重构,为了提升系统横向扩展的能力。所以,在平台整个的体系架构中引入了nginx。

      Nginx是一个自由、开源、高性能及轻量级的HTTP服务器及反转代理服务器,其性能与IMAP/POP3代理服务器相当。Nginx以其高性能、稳定、功能丰富、配置简单及占用系统资源少而著称。

Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多。

     处理静态文件,索引文件以及自动索引; 

     反向代理加速(无缓存),简单的负载均衡和容错;

     FastCGI,简单的负载均衡和容错;

     模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;

     SSL 和 TLS SNI 支持;

     *优势

     Nginx专为性能优化而开发,性能是其最重要的考量, 实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验, 有报告表明能支持高达 50,000 个并发连接数。 

     Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理服务器对外进行服务。

     Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。

     例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。

    nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,就稳定性而言, nginx比lighthttpd更胜一筹。 

    Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。 

    Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

    关于nginx的安装,网络上有很多很好的文章。有下载源码手动编译安装的方式,还有就是yum命令安装的方式。前者可以选择你认为比较不错的版本进行安装部署,后者会安装官网提供的建议版本安装。

我写的这部分内容,是对我在部署nginx中遇到的问题进行一次说明。同时希望对一些nginx的初学者产生帮助。

 #设定负载均衡的服务器列表
 #均衡负载的策略有很多,有轮询方式、权重方式等
        upstream admin_jiaoyu365_net{
                  server 10.8.25.71 max_fails=2 fail_timeout=30s;
                  server 10.8.26.34 max_fails=2 fail_timeout=30s;        
       }
    server {
        listen       80;
        server_name  admin.jiaoyu365.net;//需要进行请求分发的域名(host)

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /{
    
         proxy_store off;
         proxy_redirect  off;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header Host $http_host;
         proxy_pass http://admin_jiaoyu365_net; //注意要和上面的upstream 的名称一致
        
       }

  对于nginx的负载均衡配置主要就是要配置好upstream 以及server内容的配置。

     在配置nginx的过程中还遇到了一个问题,就是关于默认虚拟主机的问题。

     现象描述:

     我在10.8.25.71,10.8.26.34 上分别部署站点www.365.com。我通过修改hosts修改域名的指向,全部指向到nginx的服务器。此时,虽然没有在nginx的配置文件中添加任何关于www.365.com的相关配置。依然,会出现nginx将www.365.com的请求进行了分发。这个问题困扰了我好长时间,一直搞不懂为什么。按照道理来讲我在nginx配置了请求转发的域名,才可以进行转发。

     后来经过一番查询,了解到了nginx会有一个默认虚拟主机的问题。这个设置非常有用,比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500. 
     目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置: 

server { 
listen 80 default; 
return 500; 
} 

  也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以: 

server { 
listen 80 default; 
rewrite ^(.*) http://www.jb51.net permanent; //指向你想要跳转的域名
} 

  

     

posted on 2015-07-20 17:34  捡奥伟  阅读(133)  评论(0)    收藏  举报