@marcel91200 / caddy Mirror · read-only / commits / 8ef0a0b4
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

reverse_proxy: Fix panic for some CLI flag values (closes #2848)

Matthew Holt committed Oct 31, 2019 at 11:34 UTC 8ef0a0b4f8968fd1952449f9068e66486f40964c
1 file changed +15 -9
modules/caddyhttp/reverseproxy/command.go
+15 -9
@@ -17,7 +17,7 @@ package reverseproxy
17 import (
18 "encoding/json"
19 "flag"
20 - "log"
20 + "fmt"
21 "net/http"
22 "net/url"
23 "strings"
@@ -63,18 +63,21 @@ func cmdReverseProxy(fs caddycmd.Flags) (int, error) {
63 from = "localhost:" + httpcaddyfile.DefaultPort
64 }
65
66 + // URLs need a scheme in order to parse successfully
67 if !strings.Contains(from, "://") {
68 from = "http://" + from
69 }
70 + if !strings.Contains(to, "://") {
71 + to = "http://" + to
72 + }
73
74 fromURL, err := url.Parse(from)
75 if err != nil {
72 - fromURL.Host = from
76 + return caddy.ExitCodeFailedStartup, fmt.Errorf("parsing 'from' URL: %v", err)
77 }
74 -
78 toURL, err := url.Parse(to)
79 if err != nil {
77 - toURL.Host = to
80 + return caddy.ExitCodeFailedStartup, fmt.Errorf("parsing 'to' URL: %v", err)
81 }
82
83 ht := HTTPTransport{}
@@ -99,16 +102,19 @@ func cmdReverseProxy(fs caddycmd.Flags) (int, error) {
102 caddyconfig.JSONModuleObject(handler, "handler", "reverse_proxy", nil),
103 },
104 }
102 - if fromURL.Hostname() != "" {
105 + urlHost := fromURL.Hostname()
106 + if urlHost != "" {
107 route.MatcherSetsRaw = []map[string]json.RawMessage{
108 map[string]json.RawMessage{
105 - "host": caddyconfig.JSON(caddyhttp.MatchHost{fromURL.Hostname()}, nil),
109 + "host": caddyconfig.JSON(caddyhttp.MatchHost{urlHost}, nil),
110 },
111 }
112 }
113
110 - listen := ":" + httpcaddyfile.DefaultPort
111 - if certmagic.HostQualifies(fromURL.Hostname()) {
114 + listen := ":80"
115 + if urlPort := fromURL.Port(); urlPort != "" {
116 + listen = ":" + urlPort
117 + } else if certmagic.HostQualifies(urlHost) {
118 listen = ":443"
119 }
120
@@ -132,7 +138,7 @@ func cmdReverseProxy(fs caddycmd.Flags) (int, error) {
138 return caddy.ExitCodeFailedStartup, err
139 }
140
135 - log.Printf("Caddy 2 proxying from %s to %s", from, to)
141 + fmt.Printf("Caddy 2 proxying from %s to %s\n", fromURL, toURL)
142
143 select {}
144 }