59 lines
947 B
Go
59 lines
947 B
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),
|
||
|
}
|
||
|
err = http.ListenAndServe(":"+strconv.Itoa(port), rp)
|
||
|
if err != nil {
|
||
|
log.Fatal(err.Error())
|
||
|
return
|
||
|
}
|
||
|
|
||
|
}
|