nginx(负载均衡基本配置)

来源:互联网 发布:三千元手机推荐知乎 编辑:程序博客网 时间:2024/06/05 23:58

反向代理后端如果有多台服务器,自然可形成负载均衡。

但是proxy_pass如何指向多态服务器的?

实现方式:把多台服务器用up_stream指定在一起并起个组名。

然后proxy_pass指向该组。

默认负载均衡的算法很简单。就是针对服务器的顺序。逐个请求。

实际配置

1、  首先配置两台(或以上)服务器

server {        listen       81;        server_name  192.168.0.2;    root html;    access_log logs/81-access.log main;    }    server {        listen       82;        server_name  192.168.0.2;        root html;    access_log logs/82-access.log main;    }

2、配置upstream

upstream imgserver {   server 192.168.0.2:81 weight=1 max_fails=2 fail_timeout=3;           server 192.168.0.2:82 weight=1 max_fails=2 fail_timeout=3;     }
****参数说明****

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下:

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

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

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

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

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

3、  在需要做负载均衡的地方加配置

例如访问jpg|jpeg|gif|png图片,将所有的访问请求转发给负载均衡服务器进行访问。

location ~* \.(jpg|jpeg|gif|png) {    proxy_set_header x-Forwarded-For $remote_addr;    proxy_pass  http://imgserver;}

注意:设置proxy_set_header的作用是

X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了

最终配置文件为:

http {    include       mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    '$status $body_bytes_sent "$http_referer" '    '"$http_user_agent" "$http_x_forwarded_for"';    access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    upstream imgserver { server 192.168.0.2:81 weight=1 max_fails=2 fail_timeout=3;         server 192.168.0.2:82 weight=1 max_fails=2 fail_timeout=3;        }    server {        listen       81;        server_name  192.168.0.2;    root html;access_log logs/81-access.log main;    }    server {        listen       82;        server_name  192.168.0.2;        root html;access_log logs/82-access.log main;    }    server {        listen       80;        server_name  192.168.0.2;        location / {            root   html;            index  index.html index.htm;        }        location ~* \.(jpg|jpeg|gif|png) {    proxy_set_header x-Forwarded-For $remote_addr;    proxy_pass  http://imgserver;        }        error_page  404 500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}
至此,基本的配置已经完成。

运行示例:在地址栏中访问nginx服务器http://192.168.0.2:80/image/log.png


然后查看81-access.log或者是81-access-log的日志。


会发现最后一行出现了请求nginx服务器的原始ip。

通过查看日志可以看出访问80的服务器,经过正则匹配(~*\.(jpg|jpeg|gif|png))将访问请求转发给了imgserver里面的图片请求服务器。然后81-access.log记录了访问的详细地址。

注:默认负载均衡的算法是逐个请求,

也有其他算法,负载均衡算法。如一致性哈希算法,需要安装三个模块(ngx_http_upstream_consistent_hash)

http://wiki.nginx.org/NginxHttpUpstreamConsistentHash

这个模块就是用一致性hash来请求后端结节,并且其算法,与PHP中的memcache模块的一致性hash算法,兼容。







原创粉丝点击