first working version

This commit is contained in:
Your Name 2020-07-06 10:30:11 -04:00
parent 49ecf5b3d5
commit 031f5727e2
3 changed files with 63 additions and 1 deletions

View File

@ -1,3 +1,10 @@
# unixproxy
A simple service to proxy unix sockets to http
A simple service to proxy unix sockets to http. Useful for containerizing web services that don't natively support listening on unix sockets.
Usage of unixproxy:
-unix string
Unix socket to listen on
-url string
URL to proxy to

55
main.go Normal file
View File

@ -0,0 +1,55 @@
package main
import (
"flag"
"log"
"net"
"net/http"
"net/http/httputil"
"net/url"
"os"
"time"
)
type myConfig struct {
MyURL string
MySock string
}
func main() {
var c myConfig
flag.StringVar(&c.MyURL, "url", "", "URL to proxy to")
flag.StringVar(&c.MySock, "unix", "", "Unix socket to listen on")
flag.Parse()
if c.MySock == "" {
log.Fatal("sock argument required")
}
rpURL, err := url.Parse("http://127.0.0.1:8080")
if err != nil {
log.Fatal(err)
}
if err := os.RemoveAll(c.MySock); err != nil {
log.Fatal(err)
}
frontendProxy := httputil.NewSingleHostReverseProxy(rpURL)
srv := &http.Server{
ReadTimeout: 2 * time.Second,
WriteTimeout: 3 * time.Second,
IdleTimeout: 30 * time.Second,
ReadHeaderTimeout: 20 * time.Second,
Handler: frontendProxy,
}
unixListener, err := net.Listen("unix", c.MySock)
if err != nil {
log.Fatal(err)
}
log.Fatal(srv.Serve(unixListener))
}

BIN
unixproxy Executable file

Binary file not shown.