Skip to content

Instantly share code, notes, and snippets.

@dskinner
Created September 20, 2013 22:55
Show Gist options
  • Save dskinner/6645008 to your computer and use it in GitHub Desktop.
Save dskinner/6645008 to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"encoding/json"
"flag"
"fmt"
"github.com/gorilla/mux"
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"runtime"
)
var configFile = flag.String("f", "proxy.json", "config file to parse")
type Config struct {
Listen string
Sites map[string][]string
}
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
flag.PrintDefaults()
}
flag.Parse()
}
func main() {
f, _ := os.Open(*configFile)
dec := json.NewDecoder(bufio.NewReader(f))
var config Config
if err := dec.Decode(&config); err != nil {
log.Fatal(err)
}
r := mux.NewRouter()
for site := range config.Sites {
u, _ := url.Parse(site)
p := httputil.NewSingleHostReverseProxy(u)
for _, domain := range config.Sites[site] {
r.NewRoute().Host(domain).Handler(p)
}
}
log.Fatal(http.ListenAndServe(config.Listen, r))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment