mirror of
https://github.com/bingohuang/docker-labs.git
synced 2025-07-14 10:17:26 +08:00
Update proxy to handle port redirects (#92)
This commit is contained in:
parent
3dc1f3e601
commit
640d64c3aa
21
api.go
21
api.go
@ -8,9 +8,7 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"flag"
|
||||
"strconv"
|
||||
|
||||
"github.com/franela/play-with-docker/config"
|
||||
"github.com/franela/play-with-docker/handlers"
|
||||
"github.com/franela/play-with-docker/services"
|
||||
"github.com/franela/play-with-docker/templates"
|
||||
@ -21,13 +19,8 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
var sslPortNumber, portNumber int
|
||||
var key, cert string
|
||||
flag.IntVar(&portNumber, "port", 3000, "Give a TCP port to run the application")
|
||||
flag.IntVar(&sslPortNumber, "sslPort", 3001, "Give a SSL TCP port")
|
||||
flag.StringVar(&key, "key", "./pwd/server-key.pem", "Server key for SSL")
|
||||
flag.StringVar(&cert, "cert", "./pwd/server.pem", "Give a SSL cert")
|
||||
flag.Parse()
|
||||
|
||||
config.ParseFlags()
|
||||
|
||||
bypassCaptcha := len(os.Getenv("GOOGLE_RECAPTCHA_DISABLED")) > 0
|
||||
|
||||
@ -89,16 +82,16 @@ func main() {
|
||||
n.UseHandler(r)
|
||||
|
||||
go func() {
|
||||
log.Println("Listening on port " + strconv.Itoa(portNumber))
|
||||
log.Fatal(http.ListenAndServe("0.0.0.0:"+strconv.Itoa(portNumber), gh.CORS(gh.AllowCredentials(), gh.AllowedHeaders([]string{"x-requested-with", "content-type"}), gh.AllowedOrigins([]string{"*"}))(n)))
|
||||
log.Println("Listening on port " + config.PortNumber)
|
||||
log.Fatal(http.ListenAndServe("0.0.0.0:"+config.PortNumber, gh.CORS(gh.AllowCredentials(), gh.AllowedHeaders([]string{"x-requested-with", "content-type"}), gh.AllowedOrigins([]string{"*"}))(n)))
|
||||
}()
|
||||
|
||||
ssl := mux.NewRouter()
|
||||
sslProxyHandler := handlers.NewSSLDaemonHandler()
|
||||
ssl.Host(`{node:ip[0-9]{1,3}_[0-9]{1,3}_[0-9]{1,3}_[0-9]{1,3}}-2375.{tld:.*}`).Handler(sslProxyHandler)
|
||||
log.Println("Listening TLS on port " + strconv.Itoa(sslPortNumber))
|
||||
log.Println("Listening TLS on port " + config.SSLPortNumber)
|
||||
|
||||
s := &http.Server{Addr: "0.0.0.0:" + strconv.Itoa(sslPortNumber), Handler: ssl}
|
||||
s := &http.Server{Addr: "0.0.0.0:" + config.SSLPortNumber, Handler: ssl}
|
||||
s.TLSConfig = &tls.Config{}
|
||||
s.TLSConfig.GetCertificate = func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
|
||||
|
||||
|
13
config/config.go
Normal file
13
config/config.go
Normal file
@ -0,0 +1,13 @@
|
||||
package config
|
||||
|
||||
import "flag"
|
||||
|
||||
var SSLPortNumber, PortNumber, Key, Cert string
|
||||
|
||||
func ParseFlags() {
|
||||
flag.StringVar(&PortNumber, "port", "3000", "Give a TCP port to run the application")
|
||||
flag.StringVar(&SSLPortNumber, "sslPort", "3001", "Give a SSL TCP port")
|
||||
flag.StringVar(&Key, "key", "./pwd/server-key.pem", "Server key for SSL")
|
||||
flag.StringVar(&Cert, "cert", "./pwd/server.pem", "Give a SSL cert")
|
||||
flag.Parse()
|
||||
}
|
@ -9,6 +9,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/franela/play-with-docker/config"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
@ -30,9 +31,15 @@ func NewMultipleHostReverseProxy() *httputil.ReverseProxy {
|
||||
v := mux.Vars(req)
|
||||
node := v["node"]
|
||||
port := v["port"]
|
||||
if port == "" {
|
||||
hostPort := strings.Split(req.Host, ":")
|
||||
|
||||
// give priority to the URL host port
|
||||
if len(hostPort) > 1 && hostPort[1] != config.PortNumber {
|
||||
port = hostPort[1]
|
||||
} else if port == "" {
|
||||
port = "80"
|
||||
}
|
||||
|
||||
if strings.HasPrefix(node, "ip") {
|
||||
// Node is actually an ip, need to convert underscores by dots.
|
||||
ip := strings.Replace(strings.TrimPrefix(node, "ip"), "_", ".", -1)
|
||||
|
@ -205,11 +205,10 @@ var defaultDuration = 4 * time.Hour
|
||||
|
||||
func GetDuration(reqDur string) time.Duration {
|
||||
if reqDur != "" {
|
||||
if dur, err := time.ParseDuration(reqDur); err == nil {
|
||||
if dur, err := time.ParseDuration(reqDur); err == nil && dur <= defaultDuration {
|
||||
return dur
|
||||
}
|
||||
return defaultDuration
|
||||
|
||||
}
|
||||
|
||||
envDur := os.Getenv("EXPIRY")
|
||||
|
Loading…
x
Reference in New Issue
Block a user