{"id":13411068,"url":"https://github.com/kenriortega/ngonx","last_synced_at":"2026-03-08T01:07:05.135Z","repository":{"id":46103470,"uuid":"376997720","full_name":"kenriortega/ngonx","owner":"kenriortega","description":"Custom golang proxy inspired in nginx proxy, and traefik proxy","archived":false,"fork":false,"pushed_at":"2021-11-17T16:04:20.000Z","size":1198,"stargazers_count":18,"open_issues_count":7,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T23:32:10.300Z","etag":null,"topics":["badgerdb","golang","nginx","proxy","redis","traefik"],"latest_commit_sha":null,"homepage":"https://piqba.notion.site/f98799ba3d384526ac6591247b12481c?v=4ca0c832682749e99dcc72a66fdd71a1","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kenriortega.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-15T01:08:14.000Z","updated_at":"2025-03-13T21:35:27.000Z","dependencies_parsed_at":"2022-08-31T18:13:14.359Z","dependency_job_id":null,"html_url":"https://github.com/kenriortega/ngonx","commit_stats":null,"previous_names":["kenriortega/goproxy"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kenriortega%2Fngonx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kenriortega%2Fngonx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kenriortega%2Fngonx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kenriortega%2Fngonx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kenriortega","download_url":"https://codeload.github.com/kenriortega/ngonx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250432436,"owners_count":21429670,"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":["badgerdb","golang","nginx","proxy","redis","traefik"],"created_at":"2024-07-30T20:01:11.188Z","updated_at":"2026-03-08T01:07:05.100Z","avatar_url":"https://github.com/kenriortega.png","language":"Go","funding_links":[],"categories":["System"],"sub_categories":["Engineering Calculations"],"readme":"# nGOnx\n\nIt`s a simple proxy server written with [go](https://github.com/golang/go).\nThe core services are based on [nginx](https://github.com/nginx) server, and [traefik](https://github.com/traefik/traefik)\nOur roadmap you can find here [project board](https://piqba.notion.site/f98799ba3d384526ac6591247b12481c?v=4ca0c832682749e99dcc72a66fdd71a1)\n\n## Features\n\n* Run ngonx as a reverse proxy\n* Run ngonx as a grpc proxy\n* Run ngonx as a load balancer (round robin)\n* Run ngonx as a static web server\n* Project collaborative and open source\n\n## Download ngonxctl\n\nGo to last release and download [ngonxctl](https://github.com/kenriortega/ngonx/releases) binary for you OS\n\n## **nGOnx** commands\n\n\n```bash\nngonxctl -h\n```\n\n```bash\nThis is Ngonx ctl a proxy reverse inspired on nginx \u0026 traefik\n\nUsage:\n  ngonxctl [command]\n\nAvailable Commands:\n  completion  generate the autocompletion script for the specified shell\n  grpc        Run ngonx as a grpc proxy\n  help        Help about any command\n  lb          Run ngonx as a load balancer (round robin)\n  proxy       Run ngonx as a reverse proxy\n  setup       Create configuration file it`s doesn`t exist\n  static      Run ngonx as a static web server\n  version     Print the version number of ngonxctl\n\nFlags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n  -h, --help             help for ngonxctl\n\nUse \"ngonxctl [command] --help\" for more information about a command.\n\n```\n\n\u003e Setup cmd\n\nCreate the yaml file that contain a generic data\n\n```bash\nCreate configuration file it`s doesn`t exist\n\nUsage:\n  ngonxctl setup [flags]\n\nFlags:\n  -h, --help   help for setup\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n\u003e Yaml file with generic data\n\n\n```yaml\n# Static web server like nginx\nstatic_server:\n  host_server: 0.0.0.0\n  port_server: 8080\n  static_files: ./examples/dist\n  ssl_server:\n    enable: true\n    ssl_port: 8443\n    crt_file: ./ssl/cert.pem\n    key_file: ./ssl/key.pem\n# Grpc reverse proxy transparent\ngrpc:\n  listener_grpc: \"0.0.0.0:50000\"\n  client_crt: ./scripts/ca.crt\n  ssl_grpc:\n    enable: false\n    ssl_port: 50443\n    crt_file: ./scripts/server.crt\n    key_file: ./scripts/server.pem\n  endpoints_grpc:\n    - name: /calculator.CalculatorService\n      host_uri: 0.0.0.0:50050\n# Reverse Proxy\nproxy:\n  host_proxy: 0.0.0.0\n  port_proxy: 30000\n  port_exporter_proxy: 10000\n  ssl_proxy:\n    enable: false\n    ssl_port: 443\n    crt_file: ./ssl/cert.pem\n    key_file: ./ssl/key.pem\n  cache_proxy:\n    engine: badger # badgerDB|redis\n    key: secretKey\n  security:\n    type: apikey # apikey|jwt|none\n  # maps of microservices with routes\n  services_proxy:\n      - name: microA\n        host_uri: http://localhost:3000\n        endpoints:\n          - path_endpoints: /api/v1/health/\n            path_proxy: /health/\n            path_protected: false\n\n          - path_endpoints: /api/v1/version/\n            path_proxy: /version/\n            path_protected: true\n```\n\n\n\u003e Version cmd show Build Time, version hash and version for the current binary\n\n```bash\nPrint the version number of ngonxctl\n\nUsage:\n  ngonxctl version [flags]\n\nFlags:\n  -h, --help   help for version\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n\n\u003e Start Proxy server first time\n\n```bash\nRun ngonx as a reverse proxy\n\nUsage:\n  ngonxctl proxy [flags]\n\nFlags:\n      --genkey           Action for generate hash for protected routes\n  -h, --help             help for proxy\n      --port int         Port to serve to run proxy (default 5000)\n      --prevkey string   Action for save a previous hash for protected routes to validate JWT\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n`genkey` command in true generate random secretkey and save on badgerdb on `badger.data`\n\n```bash\n./ngonxctl proxy -port 5000 -genkey true\n```\n\n`prevkey` command receive a custom secretkey and save this on badgerdb on `badger.data`\n\n```bash\n./ngonxctl proxy -port 5000 -prevkey \u003csecretKey\u003e\n```\n\n\u003e Start Proxy server\n\n```bash\n./ngonxctl proxy -port 5000\n```\n\n\u003e Start load balancer\n\n```bash\nRun ngonx as a load balancer (round robin)\n\nUsage:\n  ngonxctl lb [flags]\n\nFlags:\n      --backends string   Load balanced backends, use commas to separate (default \"ngonx.yaml\")\n  -h, --help              help for lb\n      --port int          Port to serve to run load balancing  (default 4000)\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n\n```bash\n./ngonxctl lb --backends \"http://localhost:5000,http://localhost:5001,http://localhost:5002\"\n```\n\u003e Start static files server\n\n```bash\nRun ngonx as a static web server\n\nUsage:\n  ngonxctl static [flags]\n\nFlags:\n  -h, --help   help for static\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n```bash\n./ngonxctl static\n```\n\n\u003e Start grpc proxy server\n\n```bash\nRun ngonx as a grpc proxy\n\nUsage:\n  ngonxctl grpc [flags]\n\nFlags:\n  -h, --help   help for grpc\n\nGlobal Flags:\n  -f, --cfgfile string   File setting.yml (default \"ngonx.yaml\")\n  -p, --cfgpath string   Config path only  (default \"path/binary\")\n\n```\n\n```bash\n./ngonxctl grpc\n```\n\nMetrics\n-----------\n\nCurrently ngonx use prometheus as a metric collector. The main service `proxy` expose for port 10000 on route `/metrics`\n\n```bash\ncurl http://localhost:10000/metrics\n```\n\n\nManagement API \u0026 Web(coming...)\n-----------\n\nCurrently ngonx use port 10001 for export a simple api to check all services \n\n```bash\ncurl http://localhost:10001/api/v1/mngt/\n```\n\n  Method   | Path | \n  ---------|----------------\n  GET | /      \n  GET | /health      \n  GET | /readiness      \n  GET | /wss      \n\nUI on `http://localhost:10001/`\n\n![Service Discovery](/docs/service1.jpeg)\n![Service Discovery](/docs/service2.jpeg)\n\n\nHow to interact with app for testing reasson\n-----\n\n\u003e Start API PoC service\n\n```bash\ngo run  services/micro-a/api.go --port \u003cport\u003e\n```\n\n\u003e Start Gprc services from example folder\n\nExcute from  makefile the following cmds\n\n```bash\nmake grpcsvr # for start server\n\nmake make grpccli #for start client\n```\n\nInstall badger db on window if you don`t use CGO\n```bash\nCGO_ENABLED=0 go get github.com/dgraph-io/badger/v3\n```\n\n## Generate customs SSL (key,cert,pem,crs,cnf)\n\n```bash\n\ncd scripts\n\nchmod +x ./generate.sh\n\n./generate.sh\n```\n\n## Generate SSL (throug let`s encrypt)\n\nCheck this post [\"Contratar un certificado SSL Gratis con Let's Encrypt y configurar Nginx\"](https://www.albertcoronado.com/2020/05/05/contratar-un-certificado-ssl-gratis-con-lets-encrypt-y-configurar-nginx/ \"Contratar un certificado SSL Gratis con Let's Encrypt y configurar Nginx\") by [@acoronado](https://www.albertcoronado.com/) for more information.\n\n```bash\n\napt-get install -y certbot\n\ncertbot certonly \\\n    -d midominio.com \\\n    --noninteractive \\\n    --standalone \\\n    --agree-tos \\\n    --register-unsafely-without-email\n```\n\nThen configure our `ngonx.yaml` and add the ssl files generated by `certbot`\n\n```yaml\n# For SSL static server\n  ssl_server:\n    enable: true\n    ssl_port: 8443\n    crt_file: /etc/letsencrypt/live/mydomain.com/fullchain.pem\n    key_file: /etc/letsencrypt/live/mydomain.com/privkey.pem\n# For SSL proxy server\n  ssl_proxy:\n    enable: true\n    ssl_port: 443\n    crt_file: /etc/letsencrypt/live/mydomain.com/fullchain.pem\n    key_file: /etc/letsencrypt/live/mydomain.com/privkey.pem\n```\n\nWhen the ssl certification was expired you need to renew all certificates\nwith the following commnad\n\n```bash\ncertbot renew\n```\n\n---\n\nBenchMarking\n------------\n\n```bash\nab -c 1000 -n 10000 http://localhost:\u003cproxyPort\u003e/health\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenriortega%2Fngonx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkenriortega%2Fngonx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenriortega%2Fngonx/lists"}