1
0
mirror of https://github.com/bingohuang/docker-labs.git synced 2025-07-15 02:37:27 +08:00

Update proxy to handle port redirects (#92)

This commit is contained in:
Marcos Nils 2017-02-12 02:25:25 +02:00 committed by GitHub
parent 3dc1f3e601
commit 640d64c3aa
4 changed files with 29 additions and 17 deletions

21
api.go
View File

@ -8,9 +8,7 @@ import (
"os" "os"
"strings" "strings"
"flag" "github.com/franela/play-with-docker/config"
"strconv"
"github.com/franela/play-with-docker/handlers" "github.com/franela/play-with-docker/handlers"
"github.com/franela/play-with-docker/services" "github.com/franela/play-with-docker/services"
"github.com/franela/play-with-docker/templates" "github.com/franela/play-with-docker/templates"
@ -21,13 +19,8 @@ import (
) )
func main() { func main() {
var sslPortNumber, portNumber int
var key, cert string config.ParseFlags()
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()
bypassCaptcha := len(os.Getenv("GOOGLE_RECAPTCHA_DISABLED")) > 0 bypassCaptcha := len(os.Getenv("GOOGLE_RECAPTCHA_DISABLED")) > 0
@ -89,16 +82,16 @@ func main() {
n.UseHandler(r) n.UseHandler(r)
go func() { go func() {
log.Println("Listening on port " + strconv.Itoa(portNumber)) log.Println("Listening on port " + config.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.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() ssl := mux.NewRouter()
sslProxyHandler := handlers.NewSSLDaemonHandler() 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) 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 = &tls.Config{}
s.TLSConfig.GetCertificate = func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) { s.TLSConfig.GetCertificate = func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {

13
config/config.go Normal file
View 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()
}

View File

@ -9,6 +9,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/franela/play-with-docker/config"
"github.com/gorilla/mux" "github.com/gorilla/mux"
) )
@ -30,9 +31,15 @@ func NewMultipleHostReverseProxy() *httputil.ReverseProxy {
v := mux.Vars(req) v := mux.Vars(req)
node := v["node"] node := v["node"]
port := v["port"] 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" port = "80"
} }
if strings.HasPrefix(node, "ip") { if strings.HasPrefix(node, "ip") {
// Node is actually an ip, need to convert underscores by dots. // Node is actually an ip, need to convert underscores by dots.
ip := strings.Replace(strings.TrimPrefix(node, "ip"), "_", ".", -1) ip := strings.Replace(strings.TrimPrefix(node, "ip"), "_", ".", -1)

View File

@ -205,11 +205,10 @@ var defaultDuration = 4 * time.Hour
func GetDuration(reqDur string) time.Duration { func GetDuration(reqDur string) time.Duration {
if reqDur != "" { if reqDur != "" {
if dur, err := time.ParseDuration(reqDur); err == nil { if dur, err := time.ParseDuration(reqDur); err == nil && dur <= defaultDuration {
return dur return dur
} }
return defaultDuration return defaultDuration
} }
envDur := os.Getenv("EXPIRY") envDur := os.Getenv("EXPIRY")