105 lines
2.7 KiB
Markdown
105 lines
2.7 KiB
Markdown
# SecNex API Gateway
|
|
|
|

|
|

|
|
|
|
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)
|