五、nginx负载均衡部署多应用

问题:

要部署多应用,使用nginx做负载均衡

解决办法:

机器A:192.168.31.107
机器B:192.168.31.108
机器C:192.168.31.105
其中A、B机器部署应用
C机器部署nginx进行负载均衡
机器A与B使用上一篇内容中的方法运行起来 各自通过:

http://192.168.31.107:8000/
http://192.168.31.108:8000/

可以正常访问
现在主要来部署C机器:

  1. 安装nginx

    	sudo apt install nginx
    
  2. 修改nginx配置文件/etc/nginx/sites-enabled/default:

    	upstream demos {
    		server 192.168.31.107:8000;
    		server 192.168.31.108:8000;
    	}
    	server {
    		listen 80;
    		listen [::]:80;
    		location / {
    			proxy_pass http://demos;
    		}
    	}
    

    在upstream demos这配置上两个应用服务器启用的地址
    其中demos为设置的hostname,这样就导致,
    你的两个应用服务器接收到的请求是来自 demos域名
    因此需要修改应用服务器代码中settings.py中的ALLOWED_HOSTS
    增加demos域名,增加后用supervisor重启应用服务。

  3. 重新加载nginx配置,并访问
    sudo service nginx reload
    访问地址:http://192.168.31.105/

    如果可以正常访问就说明配置好了负载均衡
    这里的负载均衡是将请求依次分发给两个服务器的,

    这里也可以配置ip的hash值来分配:

    upstream demos {
    	ip_hash;
    	server 192.168.31.107;
    	server 192.168.31.108;
    }
    

    也可以给不同IP配置不同权重:

    upstream demos {
    	server 192.168.31.107 weight=10;
    	server 192.168.31.108 weight=20;
    }
    

    这里如果不配置weight,默认是1

    还有其它几种负载均衡,可以尝试

  4. 对nginx进行防DDos攻击

    1. 限制IP访问次数
      	upstream demos {
      		server 192.168.31.107:8000;
      		server 192.168.31.108:8000;
      	}
      	server {
      		listen 80;
      		listen [::]:80;
      		limit_req zone=one burst=5 nodelay;
      		location / {
      			proxy_pass http://demos;
      		}
      	}
      	limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
      

      $binary_remote_addr: 为二进制远程地址
      zone=one: 定义zone名称
      10m: 分给此zone10M的内存,用来存储二进制远程地址,1M内存可以存储16000会话
      rate=10r/s: 限制每秒10个请求
      burst=5: 为允许超过限制数+5个请求(只有当之前的几秒内不足10个请求时,把剩下的名额给了接下来的几秒)
      nodelay: 就是不延迟处理,直接返回503

    2. 限制并发数
      	upstream demos {
      		server 192.168.31.107:8000;
      		server 192.168.31.108:8000;
      	}
      	server {
      		listen 80;
      		listen [::]:80;
      		limit_req zone=one burst=5 nodelay;
      		limit_conn addr 1;
      		location / {
      			proxy_pass http://demos;
      		}
      	}
      	limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
      	limit_conn_zone $binary_remote_addr zone=addr:10m;
      
5、不停机部署应用
upstream demos {
    server 192.168.31.107:8000;
    server 192.168.31.108:8000;
}

现在我们应用需要升级,如果想应用服务不中断,那么,我们其实应该先在nginx的配置中down掉其中一台应用服务,这样所有访问都会去请求剩下的应用服务器

upstream demos {
    server 192.168.31.107:8000 down;
    server 192.168.31.108:8000;
}

在对应的server后面加上down,然后sudo service nginx reload就可以了

这里是用reload不是用restart,是因为nginx在实现reload的时候,
先启动一个新的进程完成新的配置检测等然后进入正常的工作状态
而原有的进程会将已经接收到的请求处理完,才会退出,
这样保证了服务的不间断

如果用restart,就变成了重启了,会导致服务中断,
如此,依次部署其它应用服务器

转载于:https://my.oschina.net/bxxfighting/blog/3018843

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值