nginx(负载均衡基本配置)

本文介绍了一种通过增加服务器数量并使用负载均衡技术分散请求的方法,包括配置多台服务器及upstream进行请求分发的具体步骤。此外,还展示了如何通过正则表达式匹配特定类型文件请求,并转发给负载均衡服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到多个服务器上,将服务器分发到不同的服务器上,也就是我们所说的负载均衡。

实际配置

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算法,兼容。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值