# SecNex API Gateway ![Go Version](https://img.shields.io/badge/Go-1.25.5-00ADD8?style=flat&logo=go) ![License](https://img.shields.io/badge/License-MIT-blue?style=flat) A high-performance, configurable API gateway built in Go with chi/v5 routing. Provides reverse proxy capabilities with path-based routing, prefix stripping, and structured logging. ## Features - **Reverse Proxy** - Route requests to backend services via HTTP reverse proxy - **Path-based Routing** - Configurable route patterns with chi/v5 router - **Prefix Stripping** - Remove path prefixes before forwarding to backends - **Host-based Routing** - Virtual hosting support via host headers - **Middleware Pipeline** - Extensible middleware chain (request ID, real IP, logging) - **Structured Logging** - JSON logging with sensitive field pseudonymization ## Quick Start ```bash # Clone the repository git clone https://git.secnex.io/secnex/gateway.git cd gateway/app # Run the gateway go run main.go ``` The gateway loads configuration from `../gateway.yaml` and starts on the configured host/port (default: `0.0.0.0:8080`). ## Health Check ```bash curl http://localhost:8080/_/health ``` Returns `200 OK` when the gateway is running. ## Documentation - [Documentation](https://git.secnex.io/secnex/gateway/-/tree/main/.docs) - [Architecture](https://git.secnex.io/secnex/gateway/-/blob/main/.docs/architecture.md) - [Configuration](https://git.secnex.io/secnex/gateway/-/blob/main/.docs/configuration.md) - [Usage](https://git.secnex.io/secnex/gateway/-/blob/main/.docs/usage.md) - [Development](https://git.secnex.io/secnex/gateway/-/blob/main/.docs/development.md) - [Deployment](https://git.secnex.io/secnex/gateway/-/blob/main/.docs/deployment.md) ## Example Configuration ```yaml gateway: host: "0.0.0.0" port: 8080 features: - request_id - real_ip - logger - host hosts: - id: "host-001" name: "localhost" domain: "localhost:8080" targets: - id: "target-001" name: "httpbin" url: "https://httpbin.org" apis: - id: "api-001" host: "host-001" target: "target-001" routes: - id: "route-001" api: "api-001" path: "/api/v1/*" strip_prefix: enabled: true prefix: "/api/v1" ``` ## Project Structure ``` app/ ├── main.go # Entry point ├── config/ # Configuration loading ├── server/ # Gateway, routes, proxy ├── middlewares/ # HTTP middleware └── utils/ # Utility functions ``` ## Requirements - Go 1.25.5 or later ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. --- Made with ❤️ by [SecNex](https://secnex.io)