Compare commits

..

2 Commits

Author SHA1 Message Date
11cf35cf0d Add proxy headers into request
All checks were successful
release-nightly / build-docker (push) Successful in 2m26s
2024-01-30 22:42:21 +08:00
28fd5aca8b 🐛 Bug fixes 2024-01-30 19:21:03 +08:00
4 changed files with 47 additions and 30 deletions

View File

@ -5,19 +5,19 @@ A blazing fast reverse proxy with a lot of shining features.
## Features ## Features
1. Reverse proxy 1. Reverse proxy
2. HTTP2 Support 2. WebSocket Support
3. WebSocket Support 3. Static File Hosting
4. Static File Hosting 4. Low Configuration
5. Low Configuration 5. Analytics and Metrics
6. Analytics and Metrics 6. Integrate with CI/CD
7. Integrate with CI/CD 7. Web management panel (Work in progres for v2, available in v1)
8. Web management panel (Work in progres for v2, available in v1) 8. One-liner CLI
9. One-liner CLI 9. Open-source and free
10. Open-source and free 10. **Blazing fast ⚡**
11. **Blazing fast ⚡**
> [!IMPORTANT] > [!IMPORTANT]
> Currently roadsign haven't supported for server-side events. We are working on it. > Currently roadsign haven't supported for server-side events. We are working on it.
> At the same time, we don't support HTTP/2.0, [here's](https://github.com/gofiber/fiber/issues/262) the reason
### How fast is it? ### How fast is it?

View File

@ -1,6 +1,7 @@
package hypertext package hypertext
import ( import (
"fmt"
"github.com/spf13/viper" "github.com/spf13/viper"
"math/rand" "math/rand"
"regexp" "regexp"
@ -94,22 +95,38 @@ func UseProxies(app *fiber.App) {
}) })
} }
func makeResponse(ctx *fiber.Ctx, region *navi.Region, location *navi.Location, dest *navi.Destination) error { func makeResponse(c *fiber.Ctx, region *navi.Region, location *navi.Location, dest *navi.Destination) error {
uri := ctx.Request().URI().String() uri := c.Request().URI().String()
// Modify request // Modify request
for _, transformer := range dest.Transformers { for _, transformer := range dest.Transformers {
if err := transformer.TransformRequest(ctx); err != nil { if err := transformer.TransformRequest(c); err != nil {
return err return err
} }
} }
// Add reserve proxy headers
ip := c.IP()
scheme := c.Protocol()
protocol := string(c.Request().Header.Protocol())
c.Request().Header.Set(fiber.HeaderXForwardedFor, ip)
c.Request().Header.Set(fiber.HeaderXForwardedHost, ip)
c.Request().Header.Set(fiber.HeaderXForwardedProto, scheme)
c.Request().Header.Set(
fiber.HeaderVia,
fmt.Sprintf("%s %s", protocol, viper.GetString("central")),
)
c.Request().Header.Set(
fiber.HeaderForwarded,
fmt.Sprintf("by=%s; for=%s; host=%s; proto=%s", c.IP(), c.IP(), c.Get(fiber.HeaderHost), scheme),
)
// Forward // Forward
err := navi.R.Forward(ctx, dest) err := navi.R.Forward(c, dest)
// Modify response // Modify response
for _, transformer := range dest.Transformers { for _, transformer := range dest.Transformers {
if err := transformer.TransformResponse(ctx); err != nil { if err := transformer.TransformResponse(c); err != nil {
return err return err
} }
} }
@ -126,10 +143,10 @@ func makeResponse(ctx *fiber.Ctx, region *navi.Region, location *navi.Location,
Location: location.ID, Location: location.ID,
Destination: dest.ID, Destination: dest.ID,
Uri: uri, Uri: uri,
IpAddress: ctx.IP(), IpAddress: c.IP(),
UserAgent: ctx.Get(fiber.HeaderUserAgent), UserAgent: c.Get(fiber.HeaderUserAgent),
Error: navi.RoadTraceError{ Error: navi.RoadTraceError{
IsNull: err == nil, IsNull: err == nil,
Message: message, Message: message,
}, },
}) })

View File

@ -1,12 +1,11 @@
package sideload package sideload
import ( import (
"fmt"
"net/http"
"code.smartsheep.studio/goatworks/roadsign/pkg/sideload/view" "code.smartsheep.studio/goatworks/roadsign/pkg/sideload/view"
"fmt"
"github.com/gofiber/fiber/v2/middleware/filesystem" "github.com/gofiber/fiber/v2/middleware/filesystem"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
"net/http"
roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" roadsign "code.smartsheep.studio/goatworks/roadsign/pkg"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
@ -43,13 +42,6 @@ func InitSideload() *fiber.App {
}, },
})) }))
app.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(view.FS),
PathPrefix: "dist",
Index: "index.html",
NotFoundFile: "index.html",
}))
cgi := app.Group("/cgi").Name("CGI") cgi := app.Group("/cgi").Name("CGI")
{ {
cgi.Get("/metadata", getMetadata) cgi.Get("/metadata", getMetadata)
@ -67,5 +59,12 @@ func InitSideload() *fiber.App {
webhooks.Put("/sync/:slug", doSync) webhooks.Put("/sync/:slug", doSync)
} }
app.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(view.FS),
PathPrefix: "dist",
Index: "index.html",
NotFoundFile: "dist/index.html",
}))
return app return app
} }

View File

@ -1,3 +1,5 @@
id = "central"
[debug] [debug]
print_routes = false print_routes = false
@ -25,7 +27,6 @@ capture_traces = true
[performance] [performance]
traces_limit = 256 traces_limit = 256
network_timeout = 3_000
prefork = false prefork = false
[security] [security]