• nginx实现负载均衡(三)


    之前说过大部分我们用到的配置都是在http模块中配置的,这里要实现的负载均衡也是一样的,要在http模块中的http全局块中指定,这里我们先给出一个例子

    demo

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    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;
    	
    	
    	#定义一个名为名为 backend 的 upstream 指令域 ,默认使用的轮询,
    	#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,
    	#故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,
    	#分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
    	# 默认的weight值是1
    	upstream backend {
        server 127.0.0.1:8080;      
        server 127.0.0.1:8081;              
        }
    	# 可以给每个服务器设定不同的权重
    	upstream backend01 {
        server 127.0.0.1:8080 weight=2;       
        server 127.0.0.1:8081 weight=1;              
        }
    	# 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    	upstream backend02 {
    	ip_hash;
        server 127.0.0.1:8080;       
        server 127.0.0.1:8081;              
        }
        server {
            listen       80;
            server_name  121.4.170.108;
    	  # 在页面输入121.4.170.108  会默认跳转到tomcat的页面
            location / {
                proxy_pass  http://backend02;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    定义负载均衡模块,upstream开头
    我们在这里定义了三个负载均衡,分别名为backend,backend01,backend02,具体使用哪个需要在server块中指定,如这里proxy_pass 后面跟的是http://backend02;,也可以是http://backend01或者http://backend

    server {
            listen       80;
            server_name  121.4.170.108;
    	  # 在页面输入121.4.170.108  会默认跳转到tomcat的页面
            location / {
                proxy_pass  http://backend02;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    配置负载均衡

    定义负载均衡

    使用upstream开头
    定义一个名为名为 backend 的 upstream 指令域 ,默认使用的轮询,
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,
    故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,
    分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
    默认的weight值是1

    • demo01
      定义的位置是在http的全局块中,这里定义了一个名为backend的负载均衡配置
    upstream backend {
        server 127.0.0.1:8080;      
        server 127.0.0.1:8081;              
        }
    
    • 1
    • 2
    • 3
    • 4
    • demo02
      可以给每个服务器设定不同的权重
    upstream backend01 {
        server 127.0.0.1:8080 weight=2;       
        server 127.0.0.1:8081 weight=1;              
        }
    
    • 1
    • 2
    • 3
    • 4
    • demo03
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
    upstream backend02 {
    	ip_hash;
        server 127.0.0.1:8080;       
        server 127.0.0.1:8081;              
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    还有别的配置规则,这里不一一举例

    指定具体的负载均衡规则

    就如我们上面所说,在proxy_pass后指定即可

    server {
            listen       80;
            server_name  121.4.170.108;
    	  # 在页面输入121.4.170.108  会默认跳转到tomcat的页面
            location / {
                proxy_pass  http://backend02;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    C++继承出现class不明确的解决办法
    Sping-AOP切面相关操作
    一文了解常用的微波传输线(二):矩形波导、集成波导、圆波导、矩圆转换器仿真
    Python QT 之PySide6简单入门
    聊聊Spring Cloud Gateway 动态路由及通过Apollo的实现
    Pisa-Proxy 之 SQL 解析实践
    Java主流分布式解决方案多场景设计与实战
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java旅游管理系统3ohx4
    阿里 P8 爆出的这份大厂面试指南,看完工资暴涨 30k!
    KMP算法 ← C++实现
  • 原文地址:https://blog.csdn.net/GDFHGFHGFH/article/details/133646783