support multi host hopefully
This commit is contained in:
@@ -12,7 +12,7 @@ type (
|
|||||||
Config struct {
|
Config struct {
|
||||||
Cert Cert
|
Cert Cert
|
||||||
Port int
|
Port int
|
||||||
Endpoints map[string]Endpoint
|
Domains map[string]map[string]Endpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
Cert struct {
|
Cert struct {
|
||||||
@@ -21,7 +21,6 @@ type (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Endpoint struct {
|
Endpoint struct {
|
||||||
From string
|
|
||||||
To string
|
To string
|
||||||
BasicAuth string
|
BasicAuth string
|
||||||
}
|
}
|
||||||
@@ -34,7 +33,7 @@ func NewConfig() (Config, error) {
|
|||||||
fs.StringVar(&c.Cert.CRT, "crt", "", "path to .crt")
|
fs.StringVar(&c.Cert.CRT, "crt", "", "path to .crt")
|
||||||
fs.StringVar(&c.Cert.Key, "key", "", "path to .key")
|
fs.StringVar(&c.Cert.Key, "key", "", "path to .key")
|
||||||
fs.IntVar(&c.Port, "p", 56112, "port to listen on")
|
fs.IntVar(&c.Port, "p", 56112, "port to listen on")
|
||||||
f := fs.String("f", "/dev/null", `file of {endpoints:{"": {from:"", to:"", basicAuth:""}}}`)
|
f := fs.String("f", "/dev/null", `file of {domain:{"":{"": {to:"", basicAuth:""}}}}`)
|
||||||
if err := fs.Parse(os.Args[1:]); err != nil {
|
if err := fs.Parse(os.Args[1:]); err != nil {
|
||||||
return c, err
|
return c, err
|
||||||
}
|
}
|
||||||
@@ -43,8 +42,8 @@ func NewConfig() (Config, error) {
|
|||||||
return c, err
|
return c, err
|
||||||
} else if err := yaml.Unmarshal(b, &c); err != nil {
|
} else if err := yaml.Unmarshal(b, &c); err != nil {
|
||||||
return c, err
|
return c, err
|
||||||
} else if len(c.Endpoints) == 0 {
|
} else if len(c.Domains) == 0 {
|
||||||
return c, fmt.Errorf("no endpoints configured")
|
return c, fmt.Errorf("no domains configured")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
|
|||||||
12
main.go
12
main.go
@@ -33,7 +33,8 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
if c.endpoint(r).To == "" {
|
endpoint := c.endpoint(r)
|
||||||
|
if endpoint.To == "" {
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -55,7 +56,6 @@ func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint := c.endpoint(r)
|
|
||||||
u, err := url.Parse(endpoint.To)
|
u, err := url.Parse(endpoint.To)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[%s] %v", c.key(r), err)
|
log.Printf("[%s] %v", c.key(r), err)
|
||||||
@@ -111,7 +111,13 @@ func (c Config) basicAuth(w http.ResponseWriter, r *http.Request) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c Config) endpoint(r *http.Request) Endpoint {
|
func (c Config) endpoint(r *http.Request) Endpoint {
|
||||||
return c.Endpoints[c.key(r)]
|
key := c.key(r)
|
||||||
|
domain := strings.TrimPrefix(r.Host, key)
|
||||||
|
m, ok := c.Domains[domain]
|
||||||
|
if !ok {
|
||||||
|
return Endpoint{}
|
||||||
|
}
|
||||||
|
return m[c.key(r)]
|
||||||
}
|
}
|
||||||
|
|
||||||
type redirPurge struct {
|
type redirPurge struct {
|
||||||
|
|||||||
6
testdata/gitea.yaml
vendored
Normal file
6
testdata/gitea.yaml
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
port: 443
|
||||||
|
domains:
|
||||||
|
.bel.blue:
|
||||||
|
gitea:
|
||||||
|
to: http://192.168.0.86:59526
|
||||||
|
basicAuth: ""
|
||||||
4
testdata/test.yaml
vendored
4
testdata/test.yaml
vendored
@@ -1,6 +1,6 @@
|
|||||||
#port: 51552 # priority over cli
|
#port: 51552 # priority over cli
|
||||||
endpoints:
|
domains:
|
||||||
foo:
|
foo:
|
||||||
from: foo.blapointe.com
|
bar:
|
||||||
to: http://192.168.0.86:51552
|
to: http://192.168.0.86:51552
|
||||||
basicAuth: u:p
|
basicAuth: u:p
|
||||||
|
|||||||
Reference in New Issue
Block a user