Merge pull request #565 from containous/merge-v1.0.1-master
Merge v1.0.1 master
This commit is contained in:
commit
7abe68fac1
13 changed files with 97 additions and 46 deletions
27
CHANGELOG.md
27
CHANGELOG.md
|
@ -1,5 +1,32 @@
|
||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## [v1.0.1](https://github.com/containous/traefik/tree/v1.0.1) (2016-07-19)
|
||||||
|
[Full Changelog](https://github.com/containous/traefik/compare/v1.0.0...v1.0.1)
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
- Error with -consulcatalog and missing load balance method on 1.0.0 [\#524](https://github.com/containous/traefik/issues/524)
|
||||||
|
- Kubernetes provider: should allow the master url to be override [\#501](https://github.com/containous/traefik/issues/501)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- Flag --etcd.endpoint default [\#508](https://github.com/containous/traefik/issues/508)
|
||||||
|
- Conditional ACME on demand generation [\#505](https://github.com/containous/traefik/issues/505)
|
||||||
|
- Important delay with streams \(Mozilla EventSource\) [\#503](https://github.com/containous/traefik/issues/503)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- Can I use Traefik without a domain name? [\#539](https://github.com/containous/traefik/issues/539)
|
||||||
|
- Priortities in 1.0.0 not behaving [\#506](https://github.com/containous/traefik/issues/506)
|
||||||
|
- Route by path [\#500](https://github.com/containous/traefik/issues/500)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Update server.go [\#531](https://github.com/containous/traefik/pull/531) ([Jsewill](https://github.com/Jsewill))
|
||||||
|
- Add sse support [\#527](https://github.com/containous/traefik/pull/527) ([emilevauge](https://github.com/emilevauge))
|
||||||
|
- Fix acme checkOnDemandDomain [\#512](https://github.com/containous/traefik/pull/512) ([emilevauge](https://github.com/emilevauge))
|
||||||
|
- Fix default etcd port [\#511](https://github.com/containous/traefik/pull/511) ([errm](https://github.com/errm))
|
||||||
|
|
||||||
## [v1.0.0](https://github.com/containous/traefik/tree/v1.0.0) (2016-07-05)
|
## [v1.0.0](https://github.com/containous/traefik/tree/v1.0.0) (2016-07-05)
|
||||||
[Full Changelog](https://github.com/containous/traefik/compare/v1.0.0-rc3...v1.0.0)
|
[Full Changelog](https://github.com/containous/traefik/compare/v1.0.0-rc3...v1.0.0)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ type TraefikConfiguration struct {
|
||||||
// GlobalConfiguration holds global configuration (with providers, etc.).
|
// GlobalConfiguration holds global configuration (with providers, etc.).
|
||||||
// It's populated from the traefik configuration file passed as an argument to the binary.
|
// It's populated from the traefik configuration file passed as an argument to the binary.
|
||||||
type GlobalConfiguration struct {
|
type GlobalConfiguration struct {
|
||||||
GraceTimeOut int64 `short:"g" description:"Configuration file to use (TOML)."`
|
GraceTimeOut int64 `short:"g" description:"Duration to give active requests a chance to finish during hot-reload"`
|
||||||
Debug bool `short:"d" description:"Enable debug mode"`
|
Debug bool `short:"d" description:"Enable debug mode"`
|
||||||
AccessLogsFile string `description:"Access logs file"`
|
AccessLogsFile string `description:"Access logs file"`
|
||||||
TraefikLogsFile string `description:"Traefik logs file"`
|
TraefikLogsFile string `description:"Traefik logs file"`
|
||||||
|
@ -300,7 +300,7 @@ func NewTraefikDefaultPointersConfiguration() *TraefikConfiguration {
|
||||||
// default Etcd
|
// default Etcd
|
||||||
var defaultEtcd provider.Etcd
|
var defaultEtcd provider.Etcd
|
||||||
defaultEtcd.Watch = true
|
defaultEtcd.Watch = true
|
||||||
defaultEtcd.Endpoint = "127.0.0.1:400"
|
defaultEtcd.Endpoint = "127.0.0.1:2379"
|
||||||
defaultEtcd.Prefix = "/traefik"
|
defaultEtcd.Prefix = "/traefik"
|
||||||
defaultEtcd.Constraints = []types.Constraint{}
|
defaultEtcd.Constraints = []types.Constraint{}
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ Here is an example of frontends definition:
|
||||||
- Three frontends are defined: `frontend1`, `frontend2` and `frontend3`
|
- Three frontends are defined: `frontend1`, `frontend2` and `frontend3`
|
||||||
- `frontend1` will forward the traffic to the `backend2` if the rule `Host:test.localhost,test2.localhost` is matched
|
- `frontend1` will forward the traffic to the `backend2` if the rule `Host:test.localhost,test2.localhost` is matched
|
||||||
- `frontend2` will forward the traffic to the `backend1` if the rule `Host:localhost,{subdomain:[a-z]+}.localhost` is matched (forwarding client `Host` header to the backend)
|
- `frontend2` will forward the traffic to the `backend1` if the rule `Host:localhost,{subdomain:[a-z]+}.localhost` is matched (forwarding client `Host` header to the backend)
|
||||||
- `frontend3` will forward the traffic to the `backend2` if the rules `Host: test3.localhost` **and** `Path:/test` are matched
|
- `frontend3` will forward the traffic to the `backend2` if the rules `Host:test3.localhost` **AND** `Path:/test` are matched
|
||||||
|
|
||||||
### Combining multiple rules
|
### Combining multiple rules
|
||||||
|
|
||||||
|
@ -130,8 +130,8 @@ In TOML file, you can use multiple routes:
|
||||||
rule = "Host:Path:/test"
|
rule = "Host:Path:/test"
|
||||||
```
|
```
|
||||||
|
|
||||||
Here `frontend3` will forward the traffic to the `backend2` if the rules `Host: test3.localhost` **and** `Path:/test` are matched.
|
Here `frontend3` will forward the traffic to the `backend2` if the rules `Host:test3.localhost` **AND** `Path:/test` are matched.
|
||||||
You can also use the notation using a `;` separator:
|
You can also use the notation using a `;` separator, same result:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[frontends.frontend3]
|
[frontends.frontend3]
|
||||||
|
@ -145,7 +145,7 @@ Finally, you can create a rule to bind multiple domains or Path to a frontend, u
|
||||||
```toml
|
```toml
|
||||||
[frontends.frontend2]
|
[frontends.frontend2]
|
||||||
[frontends.frontend2.routes.test_1]
|
[frontends.frontend2.routes.test_1]
|
||||||
rule = "Host: test1.localhost,Host: test2.localhost"
|
rule = "Host:test1.localhost,test2.localhost"
|
||||||
[frontends.frontend3]
|
[frontends.frontend3]
|
||||||
backend = "backend2"
|
backend = "backend2"
|
||||||
[frontends.frontend3.routes.test_1]
|
[frontends.frontend3.routes.test_1]
|
||||||
|
@ -154,7 +154,7 @@ Finally, you can create a rule to bind multiple domains or Path to a frontend, u
|
||||||
|
|
||||||
### Priorities
|
### Priorities
|
||||||
|
|
||||||
By default, routes will be sorted using rules length (to avoid path overlap):
|
By default, routes will be sorted (in descending order) using rules length (to avoid path overlap):
|
||||||
`PathPrefix:/12345` will be matched before `PathPrefix:/1234` that will be matched before `PathPrefix:/1`.
|
`PathPrefix:/12345` will be matched before `PathPrefix:/1234` that will be matched before `PathPrefix:/1`.
|
||||||
|
|
||||||
You can customize priority by frontend:
|
You can customize priority by frontend:
|
||||||
|
@ -175,6 +175,8 @@ You can customize priority by frontend:
|
||||||
rule = "PathPrefix:/toto"
|
rule = "PathPrefix:/toto"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here, `frontend1` will be matched before `frontend2` (`10 > 5`).
|
||||||
|
|
||||||
## Backends
|
## Backends
|
||||||
|
|
||||||
A backend is responsible to load-balance the traffic coming from one or more frontends to a set of http servers.
|
A backend is responsible to load-balance the traffic coming from one or more frontends to a set of http servers.
|
||||||
|
|
|
@ -842,7 +842,7 @@ Træfɪk can be configured to use Etcd as a backend configuration:
|
||||||
#
|
#
|
||||||
# Required
|
# Required
|
||||||
#
|
#
|
||||||
endpoint = "127.0.0.1:4001"
|
endpoint = "127.0.0.1:2379"
|
||||||
|
|
||||||
# Enable watch Etcd changes
|
# Enable watch Etcd changes
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
etcd:
|
etcd:
|
||||||
image: gcr.io/google_containers/etcd:2.2.1
|
image: gcr.io/google_containers/etcd:2.2.1
|
||||||
net: host
|
net: host
|
||||||
command: ['/usr/local/bin/etcd', '--addr=127.0.0.1:4001', '--bind-addr=0.0.0.0:4001', '--data-dir=/var/etcd/data']
|
command: ['/usr/local/bin/etcd', '--addr=127.0.0.1:2379', '--bind-addr=0.0.0.0:2379', '--data-dir=/var/etcd/data']
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# backend 1
|
# backend 1
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="NetworkErrorRatio() > 0.5" http://localhost:4001/v2/keys/traefik/backends/backend1/circuitbreaker/expression
|
curl -i -H "Accept: application/json" -X PUT -d value="NetworkErrorRatio() > 0.5" http://localhost:2379/v2/keys/traefik/backends/backend1/circuitbreaker/expression
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.2:80" http://localhost:4001/v2/keys/traefik/backends/backend1/servers/server1/url
|
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.2:80" http://localhost:2379/v2/keys/traefik/backends/backend1/servers/server1/url
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="10" http://localhost:4001/v2/keys/traefik/backends/backend1/servers/server1/weight
|
curl -i -H "Accept: application/json" -X PUT -d value="10" http://localhost:2379/v2/keys/traefik/backends/backend1/servers/server1/weight
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.3:80" http://localhost:4001/v2/keys/traefik/backends/backend1/servers/server2/url
|
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.3:80" http://localhost:2379/v2/keys/traefik/backends/backend1/servers/server2/url
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="1" http://localhost:4001/v2/keys/traefik/backends/backend1/servers/server2/weight
|
curl -i -H "Accept: application/json" -X PUT -d value="1" http://localhost:2379/v2/keys/traefik/backends/backend1/servers/server2/weight
|
||||||
|
|
||||||
# backend 2
|
# backend 2
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="drr" http://localhost:4001/v2/keys/traefik/backends/backend2/loadbalancer/method
|
curl -i -H "Accept: application/json" -X PUT -d value="drr" http://localhost:2379/v2/keys/traefik/backends/backend2/loadbalancer/method
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.4:80" http://localhost:4001/v2/keys/traefik/backends/backend2/servers/server1/url
|
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.4:80" http://localhost:2379/v2/keys/traefik/backends/backend2/servers/server1/url
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="1" http://localhost:4001/v2/keys/traefik/backends/backend2/servers/server1/weight
|
curl -i -H "Accept: application/json" -X PUT -d value="1" http://localhost:2379/v2/keys/traefik/backends/backend2/servers/server1/weight
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.5:80" http://localhost:4001/v2/keys/traefik/backends/backend2/servers/server2/url
|
curl -i -H "Accept: application/json" -X PUT -d value="http://172.17.0.5:80" http://localhost:2379/v2/keys/traefik/backends/backend2/servers/server2/url
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="2" http://localhost:4001/v2/keys/traefik/backends/backend2/servers/server2/weight
|
curl -i -H "Accept: application/json" -X PUT -d value="2" http://localhost:2379/v2/keys/traefik/backends/backend2/servers/server2/weight
|
||||||
|
|
||||||
# frontend 1
|
# frontend 1
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="backend2" http://localhost:4001/v2/keys/traefik/frontends/frontend1/backend
|
curl -i -H "Accept: application/json" -X PUT -d value="backend2" http://localhost:2379/v2/keys/traefik/frontends/frontend1/backend
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http" http://localhost:4001/v2/keys/traefik/frontends/frontend1/entrypoints
|
curl -i -H "Accept: application/json" -X PUT -d value="http" http://localhost:2379/v2/keys/traefik/frontends/frontend1/entrypoints
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="Host:test.localhost" http://localhost:4001/v2/keys/traefik/frontends/frontend1/routes/test_1/rule
|
curl -i -H "Accept: application/json" -X PUT -d value="Host:test.localhost" http://localhost:2379/v2/keys/traefik/frontends/frontend1/routes/test_1/rule
|
||||||
|
|
||||||
# frontend 2
|
# frontend 2
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="backend1" http://localhost:4001/v2/keys/traefik/frontends/frontend2/backend
|
curl -i -H "Accept: application/json" -X PUT -d value="backend1" http://localhost:2379/v2/keys/traefik/frontends/frontend2/backend
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="http" http://localhost:4001/v2/keys/traefik/frontends/frontend2/entrypoints
|
curl -i -H "Accept: application/json" -X PUT -d value="http" http://localhost:2379/v2/keys/traefik/frontends/frontend2/entrypoints
|
||||||
curl -i -H "Accept: application/json" -X PUT -d value="Path:/test" http://localhost:4001/v2/keys/traefik/frontends/frontend2/routes/test_2/rule
|
curl -i -H "Accept: application/json" -X PUT -d value="Path:/test" http://localhost:2379/v2/keys/traefik/frontends/frontend2/routes/test_2/rule
|
||||||
|
|
6
glide.lock
generated
6
glide.lock
generated
|
@ -1,5 +1,5 @@
|
||||||
hash: 5cb432175705882247ac2cbf708c879fad8b287afe9e1e18f06dbce1e956acd2
|
hash: cc5b40d58d36a83c1bef13c0d269d7126c7d639ed5f7135160b9f3b9c624c7c9
|
||||||
updated: 2016-07-28T18:20:42.864416381+02:00
|
updated: 2016-07-28T19:30:16.497440179+02:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/abbot/go-http-auth
|
- name: github.com/abbot/go-http-auth
|
||||||
version: cb4372376e1e00e9f6ab9ec142e029302c9e7140
|
version: cb4372376e1e00e9f6ab9ec142e029302c9e7140
|
||||||
|
@ -267,7 +267,7 @@ imports:
|
||||||
- name: github.com/vdemeester/shakers
|
- name: github.com/vdemeester/shakers
|
||||||
version: 24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3
|
version: 24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3
|
||||||
- name: github.com/vulcand/oxy
|
- name: github.com/vulcand/oxy
|
||||||
version: 8d476862d38b9be356eaa83b5712cad561be08a1
|
version: ab7796d7036b425fbc945853cd1b7e7adf43b0d6
|
||||||
repo: https://github.com/containous/oxy.git
|
repo: https://github.com/containous/oxy.git
|
||||||
vcs: git
|
vcs: git
|
||||||
subpackages:
|
subpackages:
|
||||||
|
|
|
@ -10,7 +10,7 @@ import:
|
||||||
- package: github.com/containous/flaeg
|
- package: github.com/containous/flaeg
|
||||||
version: da9515902135a2c9071c7464a1ae660b8b24d994
|
version: da9515902135a2c9071c7464a1ae660b8b24d994
|
||||||
- package: github.com/vulcand/oxy
|
- package: github.com/vulcand/oxy
|
||||||
version: 8d476862d38b9be356eaa83b5712cad561be08a1
|
version: ab7796d7036b425fbc945853cd1b7e7adf43b0d6
|
||||||
repo: https://github.com/containous/oxy.git
|
repo: https://github.com/containous/oxy.git
|
||||||
vcs: git
|
vcs: git
|
||||||
subpackages:
|
subpackages:
|
||||||
|
|
|
@ -31,7 +31,7 @@ func (s *EtcdSuite) SetUpTest(c *check.C) {
|
||||||
s.composeProject.Start(c)
|
s.composeProject.Start(c)
|
||||||
|
|
||||||
etcd.Register()
|
etcd.Register()
|
||||||
url := s.composeProject.Container(c, "etcd").NetworkSettings.IPAddress + ":4001"
|
url := s.composeProject.Container(c, "etcd").NetworkSettings.IPAddress + ":2379"
|
||||||
kv, err := libkv.NewStore(
|
kv, err := libkv.NewStore(
|
||||||
store.ETCD,
|
store.ETCD,
|
||||||
[]string{url},
|
[]string{url},
|
||||||
|
|
|
@ -8,7 +8,7 @@ logLevel = "DEBUG"
|
||||||
|
|
||||||
|
|
||||||
[etcd]
|
[etcd]
|
||||||
endpoint = "{{.EtcdHost}}:4001"
|
endpoint = "{{.EtcdHost}}:2379"
|
||||||
prefix = "/traefik"
|
prefix = "/traefik"
|
||||||
watch = true
|
watch = true
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if ([ "$TRAVIS_BRANCH" = "master" ] && [ -z "$TRAVIS_TAG" ]) && [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$DOCKER_VERSION" = "1.10.1" ]; then
|
if ([ -z "$TRAVIS_TAG" ]) && [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$DOCKER_VERSION" = "1.10.1" ]; then
|
||||||
echo "Deploying PR..."
|
echo "Deploying PR..."
|
||||||
else
|
else
|
||||||
echo "Skipping deploy PR"
|
echo "Skipping deploy PR"
|
||||||
|
|
28
server.go
28
server.go
|
@ -8,6 +8,7 @@ import (
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"golang.org/x/net/context"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
@ -99,20 +100,38 @@ func (server *Server) Start() {
|
||||||
|
|
||||||
// Stop stops the server
|
// Stop stops the server
|
||||||
func (server *Server) Stop() {
|
func (server *Server) Stop() {
|
||||||
for _, serverEntryPoint := range server.serverEntryPoints {
|
for serverEntryPointName, serverEntryPoint := range server.serverEntryPoints {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(server.globalConfiguration.GraceTimeOut)*time.Second)
|
||||||
|
go func() {
|
||||||
|
log.Debugf("Waiting %d seconds before killing connections on entrypoint %s...", 30, serverEntryPointName)
|
||||||
serverEntryPoint.httpServer.BlockingClose()
|
serverEntryPoint.httpServer.BlockingClose()
|
||||||
|
cancel()
|
||||||
|
}()
|
||||||
|
<-ctx.Done()
|
||||||
}
|
}
|
||||||
server.stopChan <- true
|
server.stopChan <- true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close destroys the server
|
// Close destroys the server
|
||||||
func (server *Server) Close() {
|
func (server *Server) Close() {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(server.globalConfiguration.GraceTimeOut)*time.Second)
|
||||||
|
go func(ctx context.Context) {
|
||||||
|
<-ctx.Done()
|
||||||
|
if ctx.Err() == context.Canceled {
|
||||||
|
return
|
||||||
|
} else if ctx.Err() == context.DeadlineExceeded {
|
||||||
|
log.Debugf("I love you all :'( ✝")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}(ctx)
|
||||||
server.routinesPool.Stop()
|
server.routinesPool.Stop()
|
||||||
close(server.configurationChan)
|
close(server.configurationChan)
|
||||||
close(server.configurationValidatedChan)
|
close(server.configurationValidatedChan)
|
||||||
|
signal.Stop(server.signals)
|
||||||
close(server.signals)
|
close(server.signals)
|
||||||
close(server.stopChan)
|
close(server.stopChan)
|
||||||
server.loggerMiddleware.Close()
|
server.loggerMiddleware.Close()
|
||||||
|
cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *Server) startHTTPServers() {
|
func (server *Server) startHTTPServers() {
|
||||||
|
@ -194,7 +213,7 @@ func (server *Server) defaultConfigurationValues(configuration *types.Configurat
|
||||||
for backendName, backend := range configuration.Backends {
|
for backendName, backend := range configuration.Backends {
|
||||||
_, err := types.NewLoadBalancerMethod(backend.LoadBalancer)
|
_, err := types.NewLoadBalancerMethod(backend.LoadBalancer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("Error loading load balancer method '%+v' for backend %s: %v. Using default wrr.", backend.LoadBalancer, backendName, err)
|
log.Debugf("Error loading load balancer method '%+v' for backend %s: %v. Using default wrr.", backend.LoadBalancer, backendName, err)
|
||||||
backend.LoadBalancer = &types.LoadBalancer{Method: "wrr"}
|
backend.LoadBalancer = &types.LoadBalancer{Method: "wrr"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,7 +342,10 @@ func (server *Server) createTLSConfig(entryPointName string, tlsOption *TLS, rou
|
||||||
if _, ok := server.serverEntryPoints[server.globalConfiguration.ACME.EntryPoint]; ok {
|
if _, ok := server.serverEntryPoints[server.globalConfiguration.ACME.EntryPoint]; ok {
|
||||||
if entryPointName == server.globalConfiguration.ACME.EntryPoint {
|
if entryPointName == server.globalConfiguration.ACME.EntryPoint {
|
||||||
checkOnDemandDomain := func(domain string) bool {
|
checkOnDemandDomain := func(domain string) bool {
|
||||||
if router.GetHandler().Match(&http.Request{URL: &url.URL{}, Host: domain}, &mux.RouteMatch{}) {
|
routeMatch := &mux.RouteMatch{}
|
||||||
|
router := router.GetHandler()
|
||||||
|
match := router.Match(&http.Request{URL: &url.URL{}, Host: domain}, routeMatch)
|
||||||
|
if match && routeMatch.Route != nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -505,7 +505,7 @@
|
||||||
#
|
#
|
||||||
# Required
|
# Required
|
||||||
#
|
#
|
||||||
# endpoint = "127.0.0.1:4001"
|
# endpoint = "127.0.0.1:2379"
|
||||||
|
|
||||||
# Enable watch Etcd changes
|
# Enable watch Etcd changes
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in a new issue