mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-23 23:49:47 +08:00
Bug fixes
This commit is contained in:
parent
5f72b7438a
commit
ee754b4a47
|
@ -97,11 +97,24 @@ func ArrangeBindings(allConfigs []server.Config) (map[*net.TCPAddr][]server.Conf
|
||||||
|
|
||||||
// Group configs by bind address
|
// Group configs by bind address
|
||||||
for _, conf := range allConfigs {
|
for _, conf := range allConfigs {
|
||||||
addr, err := net.ResolveTCPAddr("tcp", conf.Address())
|
newAddr, err := net.ResolveTCPAddr("tcp", conf.Address())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return addresses, errors.New("Could not serve " + conf.Address() + " - " + err.Error())
|
return addresses, errors.New("Could not serve " + conf.Address() + " - " + err.Error())
|
||||||
}
|
}
|
||||||
addresses[addr] = append(addresses[addr], conf)
|
|
||||||
|
// Make sure to compare the string representation of the address,
|
||||||
|
// not the pointer, since a new *TCPAddr is created each time.
|
||||||
|
var existing bool
|
||||||
|
for addr := range addresses {
|
||||||
|
if addr.String() == newAddr.String() {
|
||||||
|
addresses[addr] = append(addresses[addr], conf)
|
||||||
|
existing = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !existing {
|
||||||
|
addresses[newAddr] = append(addresses[newAddr], conf)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow HTTP and HTTPS to be served on the same address
|
// Don't allow HTTP and HTTPS to be served on the same address
|
||||||
|
|
|
@ -268,7 +268,7 @@ func standardAddress(str string) (host, port string, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
host, port, err = net.SplitHostPort(str)
|
host, port, err = net.SplitHostPort(str)
|
||||||
if err != nil {
|
if err != nil && schemePort == "" {
|
||||||
host, port, err = net.SplitHostPort(str + ":") // tack on empty port
|
host, port, err = net.SplitHostPort(str + ":") // tack on empty port
|
||||||
}
|
}
|
||||||
if err != nil && schemePort != "" {
|
if err != nil && schemePort != "" {
|
||||||
|
|
|
@ -14,10 +14,8 @@ func TLS(c *Controller) (middleware.Middleware, error) {
|
||||||
c.TLS.Enabled = true
|
c.TLS.Enabled = true
|
||||||
if c.Port == "http" {
|
if c.Port == "http" {
|
||||||
c.TLS.Enabled = false
|
c.TLS.Enabled = false
|
||||||
log.Printf("Warning: TLS was disabled on host http://%s."+
|
log.Printf("Warning: TLS disabled for %s://%s. To force TLS over the plaintext HTTP port, "+
|
||||||
" Make sure you are specifying https://%s in your config (if you haven't already)."+
|
"specify port 80 explicitly (https://%s:80).", c.Port, c.Host, c.Host)
|
||||||
" If you meant to serve tls on port 80,"+
|
|
||||||
" specify port 80 in your config (https://%s:80).", c.Host, c.Host, c.Host)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for c.Next() {
|
for c.Next() {
|
||||||
|
|
47
main.go
47
main.go
|
@ -78,39 +78,40 @@ func main() {
|
||||||
}(s)
|
}(s)
|
||||||
|
|
||||||
app.Servers = append(app.Servers, s)
|
app.Servers = append(app.Servers, s)
|
||||||
|
}
|
||||||
|
|
||||||
if !app.Quiet {
|
// Show initialization output
|
||||||
var checkedFdLimit bool
|
if !app.Quiet {
|
||||||
|
var checkedFdLimit bool
|
||||||
|
for addr, configs := range addresses {
|
||||||
|
for _, conf := range configs {
|
||||||
|
// Print address of site
|
||||||
|
fmt.Println(conf.Address())
|
||||||
|
|
||||||
for addr, configs := range addresses {
|
// Note if non-localhost site resolves to loopback interface
|
||||||
for _, conf := range configs {
|
if addr.IP.IsLoopback() && !isLocalhost(conf.Host) {
|
||||||
// Print address of site
|
fmt.Printf("Notice: %s is only accessible on this machine (%s)\n",
|
||||||
fmt.Println(conf.Address())
|
conf.Host, addr.IP.String())
|
||||||
|
|
||||||
// Note if non-localhost site resolves to loopback interface
|
|
||||||
if addr.IP.IsLoopback() && !isLocalhost(conf.Host) {
|
|
||||||
fmt.Printf("Notice: %s is only accessible on this machine (%s)\n",
|
|
||||||
conf.Host, addr.IP.String())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Warn if ulimit is too low for production sites
|
// Warn if ulimit is too low for production sites
|
||||||
if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") &&
|
if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") &&
|
||||||
!addr.IP.IsLoopback() && !checkedFdLimit {
|
!addr.IP.IsLoopback() && !checkedFdLimit {
|
||||||
out, err := exec.Command("ulimit", "-n").Output()
|
out, err := exec.Command("ulimit", "-n").Output()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// Note that an error here need not be reported
|
// Note that an error here need not be reported
|
||||||
lim, err := strconv.Atoi(string(bytes.TrimSpace(out)))
|
lim, err := strconv.Atoi(string(bytes.TrimSpace(out)))
|
||||||
if err == nil && lim < 4096 {
|
if err == nil && lim < 4096 {
|
||||||
fmt.Printf("Warning: File descriptor limit is too low (%d) for production sites\n", lim)
|
fmt.Printf("Warning: File descriptor limit is too low (%d) for production sites\n", lim)
|
||||||
}
|
|
||||||
checkedFdLimit = true
|
|
||||||
}
|
}
|
||||||
|
checkedFdLimit = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wait for all listeners to stop
|
||||||
app.Wg.Wait()
|
app.Wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user