it works
This commit is contained in:
58
README.md
58
README.md
@@ -1,57 +1 @@
|
||||
# URL Redirect Service
|
||||
|
||||
A minimal Go application for handling URL redirects with the smallest possible memory footprint.
|
||||
|
||||
## Features
|
||||
|
||||
- **Host-based redirects**: Redirects based on the incoming host header
|
||||
- **Path-based redirects**: Redirects based on the URL path
|
||||
- **Proxy support**: Handles `X-Forwarded-Host` and `X-Forwarded-Uri` headers from reverse proxies
|
||||
- **Protocol agnostic**: Works with both HTTP and HTTPS requests
|
||||
- **Minimal memory usage**: Uses only Go's standard library with no external dependencies
|
||||
|
||||
## Current Redirect Rules
|
||||
|
||||
### Host-based
|
||||
- `mail.terrible.dev` → `https://mail.tommyparnell.com`
|
||||
|
||||
### Path-based
|
||||
- `/test` → `https://blog.terrible.dev`
|
||||
|
||||
## Usage
|
||||
|
||||
1. Run the application:
|
||||
```bash
|
||||
go run main.go
|
||||
```
|
||||
|
||||
2. The server will start on port 8080
|
||||
|
||||
3. Test the redirects:
|
||||
```bash
|
||||
# Test host-based redirect
|
||||
curl -H "Host: mail.terrible.dev" http://localhost:8080
|
||||
|
||||
# Test path-based redirect
|
||||
curl http://localhost:8080/test
|
||||
|
||||
# Test with X-Forwarded headers (simulating a reverse proxy)
|
||||
curl -H "X-Forwarded-Host: mail.terrible.dev" http://localhost:8080
|
||||
curl -H "X-Forwarded-Uri: /test" http://localhost:8080
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To build a standalone binary:
|
||||
```bash
|
||||
go build -o redirect main.go
|
||||
```
|
||||
|
||||
## Memory Optimization
|
||||
|
||||
This application is designed for minimal memory usage:
|
||||
- Uses only Go's standard `net/http` package
|
||||
- Single handler function for all routes
|
||||
- Simple map lookups for redirect rules
|
||||
- No external dependencies or frameworks
|
||||
- Supports reverse proxy headers without additional overhead
|
||||
A simple go fiber app to redirect urls for myself
|
||||
27
go.sum
Normal file
27
go.sum
Normal file
@@ -0,0 +1,27 @@
|
||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo=
|
||||
github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
|
||||
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
|
||||
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
|
||||
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
|
||||
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
|
||||
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
|
||||
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
12
main.go
12
main.go
@@ -1,6 +1,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
@@ -56,8 +58,14 @@ func main() {
|
||||
// Use a single handler function to minimize memory overhead
|
||||
app.All("*", redirectHandler)
|
||||
|
||||
// Start server on port 8080
|
||||
if err := app.Listen(":8080"); err != nil {
|
||||
// Get port from environment variable (Heroku sets this)
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080" // Default port for local development
|
||||
}
|
||||
|
||||
// Start server on the specified port
|
||||
if err := app.Listen(":" + port); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user