/ 中存储网

freebsd系统中使用Nginx实现反向代理和负载均衡

2014-04-08 14:50:02 来源:itjs.cn
设置方法简述:在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{}块中的第1个server{}块

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

加载反向代理配置

这里先在server{}块中

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

(二)多个反向代理使用

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

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

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.如果后端使用nginx做web可以在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、  访问测试

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

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

1)、轮询(默认)

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

2)、weight

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

2)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决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机器。所以这台机器压力会最轻。