middleware/proxy: config syntax cleanups (#435)

* middleware/proxy: config syntax cleanups

Allow port numbers to be used in the transfer statements and clean
up the proxy stanza parsing. Also allow, when specifying an upstream,
/etc/resolv.conf (or any other file) to be used for getting the upstream
nameserver.

Add tests and fix the documentation to make clear what is allowed.

* Fix the other upstream parse as well
This commit is contained in:
Miek Gieben
2016-11-24 16:57:20 +01:00
committed by GitHub
parent c8dd0459c7
commit 4a8db8a4ce
7 changed files with 212 additions and 56 deletions

View File

@@ -1,18 +1,17 @@
package proxy
import (
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
"os"
"strconv"
"strings"
"sync/atomic"
"time"
"github.com/miekg/coredns/middleware"
"github.com/miekg/coredns/middleware/pkg/dnsutil"
"github.com/mholt/caddy/caddyfile"
"github.com/miekg/dns"
@@ -68,26 +67,9 @@ func NewStaticUpstreams(c *caddyfile.Dispenser) ([]Upstream, error) {
}
// process the host list, substituting in any nameservers in files
var toHosts []string
for _, host := range to {
h, _, err := net.SplitHostPort(host)
if err != nil {
h = host
}
if x := net.ParseIP(h); x == nil {
// it's a file, parse as resolv.conf
c, err := dns.ClientConfigFromFile(host)
if err == os.ErrNotExist {
return upstreams, fmt.Errorf("not an IP address or file: `%s'", h)
} else if err != nil {
return upstreams, err
}
for _, s := range c.Servers {
toHosts = append(toHosts, net.JoinHostPort(s, c.Port))
}
} else {
toHosts = append(toHosts, host)
}
toHosts, err := dnsutil.ParseHostPortOrFile(to...)
if err != nil {
return upstreams, err
}
for c.NextBlock() {
@@ -99,7 +81,7 @@ func NewStaticUpstreams(c *caddyfile.Dispenser) ([]Upstream, error) {
upstream.Hosts = make([]*UpstreamHost, len(toHosts))
for i, host := range toHosts {
uh := &UpstreamHost{
Name: defaultHostPort(host),
Name: host,
Conns: 0,
Fails: 0,
FailTimeout: upstream.FailTimeout,
@@ -297,11 +279,3 @@ func (u *staticUpstream) IsAllowedPath(name string) bool {
}
return true
}
func defaultHostPort(s string) string {
_, _, e := net.SplitHostPort(s)
if e == nil {
return s
}
return net.JoinHostPort(s, "53")
}