From 78fb4aeb8f4247cfde0528c9010f64223829fe18 Mon Sep 17 00:00:00 2001 From: Alexis Bouchez Date: Sat, 4 Oct 2025 01:05:07 +0200 Subject: [PATCH] initial commit --- backend/main.go | 29 +++++++++++++++++++++++++++++ go.mod | 3 +++ proxy/main.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 backend/main.go create mode 100644 go.mod create mode 100644 proxy/main.go diff --git a/backend/main.go b/backend/main.go new file mode 100644 index 0000000..e1dddc0 --- /dev/null +++ b/backend/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "encoding/json" + "log" + "net/http" +) + +type Response struct { + Message string `json:"message"` + Headers map[string][]string `json:"headers"` + Path string `json:"path"` +} + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + response := Response{ + Message: "Hello from backend server!", + Headers: r.Header, + Path: r.URL.Path, + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + }) + + log.Println("Backend server démarré sur :8080") + log.Fatal(http.ListenAndServe(":8080", nil)) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b4b6206 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module hypercommit.com/alex/go-reverse-proxy + +go 1.25.0 diff --git a/proxy/main.go b/proxy/main.go new file mode 100644 index 0000000..f201aff --- /dev/null +++ b/proxy/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "log" + "net/http" + "net/http/httputil" + "net/url" +) + +func main() { + // URL du serveur backend + target, err := url.Parse("http://localhost:8080") + if err != nil { + log.Fatal(err) + } + + // Créer le reverse proxy + proxy := httputil.NewSingleHostReverseProxy(target) + + // Customiser les requêtes + proxy.Director = func(req *http.Request) { + req.URL.Scheme = target.Scheme + req.URL.Host = target.Host + req.Host = target.Host + req.Header.Set("X-Forwarded-Host", req.Header.Get("Host")) + req.Header.Set("X-Origin-Host", target.Host) + } + + // Gérer les erreurs + proxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) { + log.Printf("Erreur proxy: %v", err) + w.WriteHeader(http.StatusBadGateway) + w.Write([]byte("Service indisponible")) + } + + // Démarrer le serveur sur le port 3000 + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + proxy.ServeHTTP(w, r) + }) + + log.Println("Reverse proxy démarré sur :9000") + log.Fatal(http.ListenAndServe(":9000", nil)) +}