Bug fixes

This commit is contained in:
Matthew Holt 2015-05-21 00:40:05 -06:00
parent 5f72b7438a
commit ee754b4a47
4 changed files with 42 additions and 30 deletions

View File

@ -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

View File

@ -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 != "" {

View File

@ -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
View File

@ -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()
} }