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.
2021-10-30 08:54:41 +00:00
|
|
|
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{
|
2021-10-30 12:11:08 +00:00
|
|
|
Proxy: http.ProxyURL(proxyUrl),
|
|
|
|
DisableKeepAlives: true,
|
2021-10-30 08:54:41 +00:00
|
|
|
}
|
2021-10-30 10:38:16 +00:00
|
|
|
|
2021-10-30 10:44:53 +00:00
|
|
|
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)
|
|
|
|
}))
|
2021-10-30 08:54:41 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err.Error())
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|