• 【自用笔记】nginx 配置多 context 及简单负载均衡


    个人工作笔记,备忘。

    1. 需求描述


    • 有两套前端代码,project01project02,分别放在 nginx 的 html 目录下
      在这里插入图片描述

    • 有一套后端服务,两个前端项目都请求该服务,并且该后端服务进行多节点部署,通过 nginx 负载均衡确保高可用。
      这里我将后端服务使用 docker 方式启动两个容器,端口分别是 8888 和 9999

      在这里插入图片描述

    2. 配置详情


    #user  nobody;
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
    	# 配置负载均衡服务
    	upstream demo { 
    		# 配置负载均衡,weight 为权重,去掉则使用轮询策略
    		server localhost:8888 weight=1;
    		server localhost:9999 weight=2;
    	}
    
        server {
            listen       8080;
            server_name  localhost;
    
    		# nginx 默认根目录
            location / {
                root   html;
                index  index.html index.htm;
            }
    		
    		# 前端 01 路径指定
    		location /project01 {
    			alias	html/project01;
                index	index.html;
            }
    		
    		# 前端 02 路径指定
    		location /project02 {
    			alias	html/project02;
                index	index.html;
            }
    		
    		# 前端请求后端
    		location /demo {
    			# 无负载均衡的写法
    			# proxy_pass	http://localhost:8888/demo; 
    			
    			# 通过负载均衡实现
    			proxy_pass		http://demo;
    		}  
        }
    }
    
    
    • 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

    核心配置注释:

    负载均衡配置

    	# 配置负载均衡服务
    	upstream demo { 
    		# 配置负载均衡,weight 为权重,去掉则使用轮询策略
    		server localhost:8888 weight=1;
    		server localhost:9999 weight=2;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 这里 demo 根据自己的请求信息进行定义,我这示例程序中,前端请求后端 url 是 http://localhost:8888/demo/xxx 所以此处使用 demo
    2. weight=1 weight=2 为权重配置,可以去掉,去掉后为轮询策略,轮流对服务节点进行请求。

    前端项目目录配置

    	# 前端 01 路径指定
    	location /project01 {
    		alias	html/project01;
            index	index.html;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    由于有多个前端项目,不能直接放在 nginx 的 html 目录下,需要建立项目单独的目录,然后通过 alias 指定该目录,后面路径可以用相对路径,也可以用绝对路径。


    调用负载均衡配置

    	# 前端请求后端
    	location /demo {
    		# 无负载均衡的写法
    		# proxy_pass	http://localhost:8888/demo; 
    			
    		# 通过负载均衡实现
    		proxy_pass		http://demo;
    	}  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    按照无负载均衡的写法,即 proxy_pass http://localhost:8888/demo
    现在因为有多个节点,可以是多个 ip 或多个端口,因此需要通过示例中的写法,http:// + 之前配置的负载均衡中的 demo

    3. 效果示例


    1. 通过指定不同 context 访问到不同的前端项目中(/project01/project02)
      在这里插入图片描述
      在这里插入图片描述

    2. 负载均衡实现后端请求

      这是权重为 1:2 时的请求结果
      在这里插入图片描述
      这是没有配置权重,使用默认轮询策略的请求结果
      在这里插入图片描述

  • 相关阅读:
    数据结构——C语言实现String字符串操作
    《Python语言程序设计》刘卫国主编字典与集合习题7详解(选择)
    Java-多线程基础及线程安全
    2 OpenCV实现的F矩阵+RANSAC原理与实践
    SAGA GIS使用教程
    Hudi源码 | Insert源码分析总结(二)(WorkloadProfile)
    在SpringBoot中使用logback优化异常堆栈的输出
    【牛客网刷题】VL2 异步复位的串联T触发器
    无状态java服务在k8s下流量无缝切换
    Python 算法高级篇:分治算法的原理与应用
  • 原文地址:https://blog.csdn.net/qq12547345/article/details/125421182