作者:diege

日期:2012-04-17

设置方法简述:在http{}块定义负载均衡服务器列表,在server{}块的location下使用

一、反向代理配置

()单个反向代理使用

1、设置反向代理配置

#ee usr/local/etc/nginx/proxy.conf

server {

        listen  80;                    

        server_name     www.example.com;

        location / {                   

                proxy_pass              http://192.168.1.200:8080;

                proxy_set_header        X-Real-IP $remote_addr;

                proxy_set_header        Host $host;

        }                              

}

2、加载反向代理配置

http{}块中的第1server{}

include /usr/local/etc/nginx/proxy.conf;

加载反向代理配置

这里先在server{}块中

# vim /usr/local/etc/nginx/nginx.conf

(二)多个反向代理使用

在虚拟站点中使用,不同功能指向不同后端服务器

http{}块中的第1server{}块加载虚拟站点配置

include vhosts/*.conf;

# vim /usr/local/etc/nginx/vhosts/www.example.com.conf

   

location /static {

             proxy_pass              http://192.168.1.200:8080;

             proxy_set_header        X-Real-IP $remote_addr;

             proxy_set_header        Host $host;

     }

        

     location /news {

             proxy_pass              http://192.168.1.220:8080;

             proxy_set_header        X-Real-IP $remote_addr;

             proxy_set_header        Host $host;

     }

测试好像无法访问http://www.example.com/static/

使用rewrite ^(.*)   http://192.168.1.200:8080; 则可以

LOG

192.168.1.1 - - [16/Apr/2012:21:50:44 +0800] "GET /static/ HTTP/1.1" 404 205 "-" "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"

http://192.168.1.200:8080下有文件目录static/index.html后可以访问。原因是前端访问路径和后端一样。

如果代理到http://192.168.1.200:8080根目录下 如何设置

正确设置:将所有/static的请求rewite/,然后再使用代理

     location  /static {

             rewrite ^/static/(.*)$  /$1 break;

             proxy_pass              http://192.168.1.200:8080;

             #proxy_set_header        X-Real-IP $remote_addr;

             #proxy_set_header        Host $host;

             #proxy_redirect   default;

 

     }

朋友介绍在后端也用于和前端一样的目录结构,这样简单,配置文件也简单,方便维护,同时节省了rewrite的开销

例如

                location /bbs/ {
                            proxy_pass    http://192.168.1.200:8099/bbs/;
                            proxy_redirect default ;
                 }

 ()记录真实的ip地址

代理补充

如果要后端记录来源地址的真实IP而不是前端代理的IP.如果后端使用nginxweb可以在nginx配置中

http {

        set_real_ip_from       192.168.1.200;

        real_ip_header         X-Real-IP;

}

对应代理的配置

             proxy_set_header        X-Real-IP $remote_addr;

             proxy_set_header        Host $host;

 

 

二、负载均衡配置

负载均衡就是多个站点做一组反向代理

1、  http {}块中配置

# vim /usr/local/etc/nginx/nginx.conf

http {

                  

       upstream cluster_server_com {

                 server 172.17.2.192:80 max_fails=2 fail_timeout=30s;

                 server 172.17.2.190:80 max_fails=2 fail_timeout=30s;  

   }

….

}

2、  server{}块使用前面配置的cluster_server_com,虚拟站点中

# vim /usr/local/etc/nginx/vhosts/www.example.com.conf

server {

                  

                   location / {

                   proxy_pass                         http://cluster_server_com;

                   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;

        client_max_body_size    10m;

        client_body_buffer_size 128k;

        proxy_connect_timeout   90;

        proxy_send_timeout      90;

        proxy_read_timeout      90;

        proxy_buffer_size       4k;

        proxy_buffers           4 32k;

        proxy_busy_buffers_size 64k;

        proxy_temp_file_write_size 64k;

        }

                   ...

}                

3、  访问测试

可以看到是以此轮询到后端两台服务器

4nginxupstream目前支持4种方式的分配

1)、轮询(默认)

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

2)weight

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

2)ip_hash

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

3)fair(第三方)

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

4)url_hash(第三方

upstream cluster_server_com {#定义负载均衡设备的Ip及设备状态

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;

}

每个设备的状态设置为:

a)

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

b)

weight 默认为1.weight越大,负载的权重就越大。

c)

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

d)

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

e)

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