nginx index 排序 nginx配置index_负载均衡



nginx index 排序 nginx配置index_负载均衡_02


上面nginx.conf的图解配置详解


worker_processes  8;


工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。


error_log  logs/error.log  info;
 
error_log  logs/error.log;  
 
error_log  logs/error.log  notice;  
 
error_log  logs/error.log  info;


错误日志:存放路径。


pid        logs/nginx.pid;


pid(进程标识符):存放路径。


worker_rlimit_nofile 51200;


指定进程可以打开的最大描述符:数目。


这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。


现在在linux 2.6内核下开启文件打开数为51200,worker_rlimit_nofile就相应应该填写51200。


这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。


events {
 
    use epoll;


使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。


补充说明:


与apache相类,nginx针对不同的操作系统,有不同的事件模型


A)标准事件模型


Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll


B)高效事件模型


Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。


Epoll:使用于Linux内核2.6版本及以后的系统。


/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。


Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。


    worker_connections  51200;


每个工作进程的最大连接数量。根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。worker_processes*worker_connections

}




##设定http服务器,利用它的反向代理功能提供负载均衡支持


http {
 
    include       mime.types;


设定mime类型,类型由mime.type文件定义    


default_type  application/octet-stream;


设定日志格式


    sendfile on;


sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。


    autoindex on;


来启用目录流量,下面会分情况进行说明。


另外Nginx的目录流量有两个比较有用的参数,可以根据自己的需求添加:


autoindex_exact_size off;


默认为on,显示出文件的确切大小,单位是bytes。


改为off后,显示出文件的大概大小,单位是kB或者MB或者GB


autoindex_localtime on;


默认为off,显示的文件时间为GMT时间。


改为on后,显示的文件时间为文件的服务器时间


keepalive_timeout  120;


     keepalive超时时间。


upstream a{
 
          server  127.0.0.1:9998;
 
         #server  192.168.55.9:9998;  yck
 
    }


nginx的upstream目前支持4种方式的分配


1、轮询(默认)


每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。


2、weight


指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。


例如:


upstream bakend {
  
server 192.168.0.14 weight=10;
  
server 192.168.0.15 weight=10;
  
}


2、ip_hash


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


例如:


upstream bakend {
  
ip_hash;
  
server 192.168.0.14:88;
  
server 192.168.0.15:80;
  
}


3、fair(第三方)


按后端服务器的响应时间来分配请求,响应时间短的优先分配。


upstream backend {
  
server server1;
  
server server2;
  
fair;
  
}


4、url_hash(第三方)


按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。


例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法


upstream backend {
  
server squid1:3128;
  
server squid2:3128;
  
hash $request_uri;
  
hash_method crc32;
  
}
 
tips:
 
upstream bakend{#定义负载均衡设备的Ip及设备状态   }   {
  
ip_hash;
  
server 127.0.0.1:9090 down;
  
server 127.0.0.1:8080 weight=2;
  
server 127.0.0.1:6060;
  
server 127.0.0.1:7070 backup;
  
}


在需要使用负载均衡的server中增加


proxy_pass    http://bakend/   ;


每个设备的状态设置为:


1.down表示单前的server暂时不参与负载


2.weight为weight越大,负载的权重就越大。


3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误


4.fail_timeout:max_fails次失败后,暂停的时间。


5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。


nginx支持同时设置多组的负载均衡,用来给不用的server来使用。


client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug


client_body_temp_path设置记录文件的目录 可以设置最多3层目录


location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡




##配置虚拟机


          server{


         配置监听端口


        listen 9999;


          配置访问域名    


        server_name a;


         对以“mp3或exe”结尾的地址进行负载均衡


location ~* \.(jpg|png|html|mp4|apk|ico|gif|jpeg|htm|js|css|pptx|ppt|pdf|docx)$ {


             设置被代理服务器的端口或套接字,以及URL。(~*不区分大小写匹配,默认后面以这些结尾可以)


        

proxy_pass           http://a  ;
 
            proxy_set_header   Host             $host;
 
            proxy_set_header   X-Real-IP        $remote_addr;
 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;


             以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上


  

}
 
    }
 
        server{
 
                listen 9998;
 
                location /{
 
                        root /home;
 
                }
 
        }
 
        server{
 
                listen 80;
 
                location ^~/html/{
 
                        proxy_pass         http://127.0.0.1:9999;
 
                        proxy_set_header   Host             $host;
 
                        proxy_set_header   X-Real-IP        $remote_addr;
 
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
                }
 
                location ^~/ChinastrokeNet/{
 
                        proxy_pass         http://127.0.0.1:8088;
 
                        proxy_set_header   Host             $host;
 
                        proxy_set_header   X-Real-IP        $remote_addr;
 
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
                }
 
                location ^~/cs/{
 
                        proxy_pass         http://127.0.0.1:8088;
 
                        proxy_set_header   Host             $host;
 
                        proxy_set_header   X-Real-IP        $remote_addr;
 
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
                }
 
        location ^~/WebConference/{
 
                        proxy_pass         http://127.0.0.1:8088;
 
                        proxy_set_header   Host             $host;
 
                        proxy_set_header   X-Real-IP        $remote_addr;
 
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
                }



        


        }


}


location 配置可以有两种配置方法


1.前缀 + uri(字符串/正则表达式)


2.@ + name


前缀含义


    =  :精确匹配(必须全部相等)


    ~  :大小写敏感


    ~* :忽略大小写


    ^~ :只需匹配uri部分


    @  :内部服务跳转


Location 基础知识


1.location 是在 server 块中配置。


2.可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。


3.location 是有顺序的,会被第一个匹配的location 处理。


Location 配置demo


1.=,精确匹配



        location = / {


            #规则


        }


        # 则匹配到 ` http://www.example.com/ ` 这种请求。 


2.~,大小写敏感



        location ~ /Example/ {


                #规则


        }


        #请求示例


        # http://www.example.com/Example/  [成功]


        # http://www.example.com/example/  [失败]


3.~*,大小写忽略



location ~* /Example/ {
 
                #规则
 
    }


    # 则会忽略 uri 部分的大小写


    # http://www.example.com/Example/  [成功]


    # http://www.example.com/example/  [成功]


4.^~,只匹配以 uri 开头



location ^~ /img/ {
 
            #规则
 
    }


    #以 /img/ 开头的请求,都会匹配上


    # http://www.example.com/img/a.jpg   [成功]


    # http://www.example.com/img/b.mp4 [成功]


5.@,nginx内部跳转



 

location /img/ {
 
        error_page 404 @img_err;
 
    }
 
    
 
    location @img_err {
 
        # 规则
 
    }

    #以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。


nginx index 排序 nginx配置index_nginx_03