作者: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{}块中的第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机器。所以这台机器压力会最轻。