jlelse
/
ProxyExposer
Archived
1
Fork 0
This repository has been archived on 2024-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
ProxyExposer/main.go

64 lines
1.1 KiB
Go

package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"strconv"
)
func main() {
proxy := os.Getenv("PE_PROXY")
if proxy == "" {
log.Fatal("PE_PROXY not specified")
return
}
proxyUrl, err := url.Parse(proxy)
if err != nil {
log.Fatal(err.Error())
return
}
upstream := os.Getenv("PE_UPSTREAM")
if upstream == "" {
log.Fatal("PE_UPSTREAM not specified")
return
}
upstreamUrl, err := url.Parse(upstream)
if err != nil {
log.Fatal(err.Error())
return
}
portString := os.Getenv("PE_PORT")
if portString == "" {
log.Fatal("PE_PORT not specified")
return
}
port, err := strconv.Atoi(portString)
if err != nil {
log.Fatal(err.Error())
return
}
rp := httputil.NewSingleHostReverseProxy(upstreamUrl)
rp.Transport = &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
DisableKeepAlives: true,
}
err = http.ListenAndServe("0.0.0.0:"+strconv.Itoa(port), http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL.String())
rp.ServeHTTP(rw, r)
}))
if err != nil {
log.Fatal(err.Error())
return
}
}