Load Balancing
Esta receta demuestra cómo usar Nginx como servidor reverse proxy para balancear tráfico entre múltiples servidores Echo.
package main
import ( "context" "fmt" "net/http" "os"
"github.com/labstack/echo/v5" "github.com/labstack/echo/v5/middleware")
var index = ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Upstream Server</title> <style> h1, p { font-weight: 300; } </style> </head> <body> <p> Hello from upstream server %s </p> </body> </html>`
func main() { name := os.Args[1] port := os.Args[2]
e := echo.New() e.Use(middleware.Recover()) e.Use(middleware.RequestLogger())
e.GET("/", func(c *echo.Context) error { return c.HTML(http.StatusOK, fmt.Sprintf(index, name)) })
sc := echo.StartConfig{Address: port} if err := sc.Start(context.Background(), e); err != nil { e.Logger.Error("failed to start server", "error", err) }}Iniciar servidores
Sección titulada «Iniciar servidores»cd upstreamgo run server.go server1 :8081go run server.go server2 :80821) Instalar Nginx
Sección titulada «1) Instalar Nginx»Consulta la guía de instalación de Nginx.
2) Configurar Nginx
Sección titulada «2) Configurar Nginx»Crea un archivo /etc/nginx/sites-enabled/localhost con el siguiente contenido:
upstream localhost { server localhost:8081; server localhost:8082;}
server { listen 8080; server_name localhost; access_log /var/log/nginx/localhost.access.log combined;
location / { proxy_pass http://localhost; }}3) Reiniciar Nginx
Sección titulada «3) Reiniciar Nginx»service nginx restartAbre https://localhost:8080, y deberías ver una página web servida desde
“server 1” o “server 2”.
Hello from upstream server server1