美文网首页golang
golang项目的nginx反向代理和负载均衡配置

golang项目的nginx反向代理和负载均衡配置

作者: 顶尖少爷 | 来源:发表于2023-12-11 15:52 被阅读0次

    使用一个iris框架的简单demo

    main.go

    package main
    
    import (
        "github.com/kataras/iris/v12"
        "iris-demo/router/api"
    )
    
    func main() {
        app := iris.New()
        //路由
        app.Get("/version", func(context iris.Context) {
            app.Logger().Info("请求成功")
            data := make(map[string]interface{})
            data["version"] = "1.1.1"
            data["status"] = http.StatusOK
            context.JSON(data)
        })
    
        app.Run(iris.Addr(":1213"))
    }
    
    

    nginx配置

    upstream web_servers{
        server 127.0.0.1:1213;
        server 127.0.0.1:1511;
    }
    server {
            listen       8000;
            server_name  iris.app.com;
    
              access_log  /opt/homebrew/etc/nginx/logs/iris.app.com.log;
              error_log  /opt/homebrew/etc/nginx/logs/iris.app.com.error.log;
        
    
            location / {
                #proxy_pass                 http://127.0.0.1:1213;
                proxy_pass          http://web_servers; 
            proxy_redirect             off;
                proxy_set_header           Host             $host;
                proxy_set_header           X-Real-IP        $remote_addr;
                proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
        }
    

    再将go项目复制一份然后端口修改为1213

    启动两个项目

    访问 接口

    http://iris.app.com:8000/version

    负载均衡的模式

    • 轮询

    每个请求按时间顺序逐一分配到不同的后端服务器,也就是说第一次请求分配到第一台服务器上,第二次请求分配到第二台服务器上,如果只有两台服务器,第三次请求继续分配到第一台上,这样循环轮询下去,也就是服务器接收请求的比例是 1:1, 如果后端服务器down掉,能自动剔除。轮询是默认配置,不需要太多的配置。

    upstream web_servers {
       server localhost:8081;
       server localhost:8082;
    }
    
    
    • 热备

    假设有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:主服务器突然A挂了,服务器处理请求的顺序:切换到备用服务器B。

    upstream web_servers {
          server 127.0.0.1:7878; 
          server 192.168.10.121:3333 backup;  #热备     
        }
    
    • 权重模式

    根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:A-B-B。

    upstream web_servers {
        server localhost:8081 weight=1;
        server localhost:8082 weight=2;
    }
    
    • ip_hash

    这样每个ip地址固定访问一个后端服务器,可以解决session的问题

    upstream test {
        ip_hash;
        server localhost:8080;
        server localhost:8081;
    }
    
    • fair

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应。

    upstream backend {
        fair;
        server localhost:8080;
        server localhost:8081;
    }
    

    -url_hash

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法

    upstream backend {
        hash_method crc32;
        hash $request_uri;
        server localhost:8080;
        server localhost:8081;
    }
    

    相关文章

      网友评论

        本文标题:golang项目的nginx反向代理和负载均衡配置

        本文链接:https://www.haomeiwen.com/subject/sismgdtx.html