mirror of
https://github.com/coredns/coredns.git
synced 2025-11-01 02:33:14 -04:00
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:
@@ -10,7 +10,7 @@
|
||||
In its most basic form, a simple reverse proxy uses this syntax:
|
||||
|
||||
~~~
|
||||
proxy FROM To
|
||||
proxy FROM TO
|
||||
~~~
|
||||
|
||||
* **FROM** is the base path to match for the request to be proxied
|
||||
@@ -68,13 +68,13 @@ proxy example.org localhost:9005
|
||||
Load-balance all requests between three backends (using random policy):
|
||||
|
||||
~~~
|
||||
proxy . web1.local:53 web2.local:1053 web3.local
|
||||
proxy . dns1.local:53 dns2.local:1053 dns3.local
|
||||
~~~
|
||||
|
||||
Same as above, but round-robin style:
|
||||
|
||||
~~~
|
||||
proxy . web1.local:53 web2.local:1053 web3.local {
|
||||
proxy . dns1.local:53 dns2.local:1053 dns3.local {
|
||||
policy round_robin
|
||||
}
|
||||
~~~
|
||||
@@ -82,7 +82,7 @@ proxy . web1.local:53 web2.local:1053 web3.local {
|
||||
With health checks and proxy headers to pass hostname, IP, and scheme upstream:
|
||||
|
||||
~~~
|
||||
proxy . web1.local:53 web2.local:53 web3.local:53 {
|
||||
proxy . dns1.local:53 dns2.local:53 dns3.local:53 {
|
||||
policy round_robin
|
||||
health_check /health:8080
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user