{"id":13713830,"url":"https://github.com/theboshy/nginx-load-balancer","last_synced_at":"2026-01-17T05:03:04.409Z","repository":{"id":95366091,"uuid":"133987447","full_name":"theboshy/nginx-load-balancer","owner":"theboshy","description":"Balanceador de cargas simple con 4 servidores de 2 instancias en go y nodejs con configuracion nginx  ","archived":false,"fork":false,"pushed_at":"2025-02-08T19:42:43.000Z","size":22,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T20:28:49.514Z","etag":null,"topics":["go","load-balancer","nginx","nodejs"],"latest_commit_sha":null,"homepage":"https://theboshy.github.io/nginx-load-balancer/","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/theboshy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-18T17:56:31.000Z","updated_at":"2025-02-08T19:42:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"8f2e2961-885e-47b9-bd5e-425949a82d49","html_url":"https://github.com/theboshy/nginx-load-balancer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theboshy%2Fnginx-load-balancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theboshy%2Fnginx-load-balancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theboshy%2Fnginx-load-balancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theboshy%2Fnginx-load-balancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theboshy","download_url":"https://codeload.github.com/theboshy/nginx-load-balancer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252792126,"owners_count":21804906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","load-balancer","nginx","nodejs"],"created_at":"2024-08-02T23:01:45.559Z","updated_at":"2026-01-17T05:03:04.395Z","avatar_url":"https://github.com/theboshy.png","language":"Makefile","funding_links":[],"categories":["Repositories"],"sub_categories":[],"readme":"# nginx-load-balancer 🚀\n\nPequeña demostración sobre la implementación de un **Load Balancer** con **Nginx**. \nEste ejemplo cuenta con dos servicios: uno en **Go** y otro en **Node.js**. Ambos se exponen mediante **Nginx**, el cual implementa el método **Round-Robin** para balancear la carga de las solicitudes entre diferentes servidores.\n\n📌 Para más información, consulta la documentación oficial de [Load Balancing en Nginx](http://nginx.org/en/docs/http/load_balancing.html).\n\n---\n\n## 🛠 Requisitos\n\nAntes de comenzar, asegúrate de tener instaladas las siguientes herramientas:\n\n- ✅ [Docker](https://docs.docker.com/toolbox/toolbox_install_windows/) - Plataforma de contenedores\n- ✅ [GNUWin](https://stackoverflow.com/a/46842187/8513536) - Herramientas GNU para Windows *(opcional)*\n\n---\n\n## 🚀 Ejecución del Proyecto\n\nPara ejecutar el proyecto, dirígete a la carpeta de descarga y ejecuta el archivo **Makefile**:\n\n```sh\n$ cd \u003c[proyect_path]\u003e\n$ make build\n```\n\n\u003e ⚠️ Si prefieres no instalar **GNUWin**, puedes copiar los comandos manualmente desde la sección *#node servers* en el archivo [Makefile](https://github.com/theboshy/nginx-load-balancer/blob/master/Makefile).\n\nUna vez finalizada la instalación, accede al servidor **Nginx** dentro de Docker en el puerto `8080` (`xxx.xxx.xxx.xxx:8080`). Luego, prueba las rutas `/go` y `/node`. Si actualizas varias veces, notarás que el mensaje mostrado cambia en cada petición, lo que indica que la carga se está distribuyendo correctamente.\n\nPara conocer la **IP** del entorno Docker, ejecuta:\n\n```sh\n$ docker-machine ip \u003cMACHINE_NAME\u003e\n```\n\nSi usaste la configuración predeterminada de Docker, puedes verificar la IP con:\n\n```sh\n$ docker-machine ip default\n```\n\nPara listar todas las máquinas virtuales en ejecución, usa:\n\n```sh\n$ docker-machine ls\n```\n\n---\n\n## 📂 Estructura del Proyecto\n\n### 📌 `./dirapp`\nContiene los servicios y archivos Docker necesarios para el enrutamiento con **Nginx**.\n\n#### 🌐 `goserv` - Servicio en Go\nEste servicio utiliza **[Gin Gonic](https://github.com/gin-gonic/gin)** para exponer un servidor REST simple.\n\n📄 [main.go](https://github.com/theboshy/nginx-load-balancer/blob/master/dirapp/goserv/main.go)\n\n```go\nimport (\n\t\"log\"\n\t\"os\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc main() {\n\tr := gin.Default()\n\tr.GET(\"/go\", func(c *gin.Context) {\n\t\tc.JSON(200, gin.H{\n\t\t\t\"message\": os.Getenv(\"MESSAGE\"),\n\t\t})\n\t})\n\n\tif err := r.Run(\":8080\"); err != nil {\n\t\tlog.Fatalf(\"Failed to run server: %v\", err)\n\t}\n}\n```\n\nPrueba el servidor localmente con:\n```sh\n$ go run ./main.go\n```\nLuego, accede a `http://localhost:8080/go`.\n\n#### 🌐 `nodeserv` - Servicio en Node.js\n\n📄 [index.js](https://github.com/theboshy/nginx-load-balancer/blob/master/dirapp/nodeserv/index.js)\n\n```javascript\nconst http = require('http');\n\nhttp.createServer((req, res) =\u003e {\n  res.writeHead(200, {'Content-Type': 'text/html'});\n  res.end(`\u003ch1\u003e${process.env.MESSAGE}\u003c/h1\u003e`);\n}).listen(8080);\n```\n\nPrueba el servidor con:\n```sh\n$ node index.js\n```\n\n---\n\n## 🖥 Configuración de Nginx\n\n### 📌 `./nginx`\nEsta carpeta almacena la configuración de **Nginx** como balanceador de carga.\n\n📄 [Dockerfile](https://github.com/theboshy/nginx-load-balancer/blob/master/nginx/Dockerfile)\n\n```dockerfile\nFROM nginx\nRUN rm /etc/nginx/conf.d/default.conf\nCOPY nginx.conf /etc/nginx/conf.d/default.conf\n\nEXPOSE 80\n```\n\n📄 [nginx.conf](https://github.com/theboshy/nginx-load-balancer/blob/master/nginx/nginx.conf)\n\n```nginx\nupstream app-node {\n    server 172.17.0.1:8081 weight=1;\n    server 172.17.0.1:8082 weight=1;\n}\n\nupstream app-go {\n    server 172.17.0.1:8083 weight=1;\n    server 172.17.0.1:8084 weight=1;\n}\n\nserver {\n    listen 80;\n    location /node {\n        proxy_pass http://app-node;\n    }\n    location /go {\n        proxy_pass http://app-go;\n    }\n}\n```\n\nEl parámetro **weight** define la cantidad de sesiones asignadas a cada servidor. Ejemplo:\n\n```nginx\nupstream app-node {\n     server 172.17.0.1:8081 weight=100;\n     server 172.17.0.1:8082 weight=10;\n }\n```\n\nEn este caso, cuando el servidor `172.17.0.1:8081` alcance 100 sesiones, las siguientes solicitudes se dirigirán a `172.17.0.1:8082`.\n\n---\n\n## 📌 Actualización 6/6/18 🚀\n\n✅ **TODO**: Añadir configuración de balanceadores de carga dinámicos usando `docker-gen`.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheboshy%2Fnginx-load-balancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheboshy%2Fnginx-load-balancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheboshy%2Fnginx-load-balancer/lists"}