当前位置: 首页>后端>正文

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

使用一个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;
}

https://www.xamrdz.com/backend/3rv1937963.html

相关文章: