diff --git a/caddy/parse/parsing.go b/caddy/parse/parsing.go
index 26999db5a801ca3924c2456268966cd3ffe32797..3d4a383cdf48ff60872cfba3d77201fd7206c4f4 100644
--- a/caddy/parse/parsing.go
+++ b/caddy/parse/parsing.go
@@ -104,6 +104,7 @@ func (p *parser) addresses() error {
 			if err != nil {
 				return err
 			}
+
 			p.block.Addresses = append(p.block.Addresses, addr)
 		}
 
@@ -329,6 +330,9 @@ func standardAddress(str string) (address, error) {
 		}
 	}
 
+	// "The host subcomponent is case-insensitive." (RFC 3986)
+	host = strings.ToLower(host)
+
 	// see if we can set port based off scheme
 	if port == "" {
 		if scheme == "http" {
diff --git a/caddy/parse/parsing_test.go b/caddy/parse/parsing_test.go
index 493c0fff9b3470387d40962be672b84e9f1b88c7..db7fd3e1bba3625a136ff10ee589054226e8fa1f 100644
--- a/caddy/parse/parsing_test.go
+++ b/caddy/parse/parsing_test.go
@@ -13,7 +13,9 @@ func TestStandardAddress(t *testing.T) {
 		shouldErr          bool
 	}{
 		{`localhost`, "", "localhost", "", false},
+		{`LOCALHOST`, "", "localhost", "", false},
 		{`localhost:1234`, "", "localhost", "1234", false},
+		{`LOCALHOST:1234`, "", "localhost", "1234", false},
 		{`localhost:`, "", "localhost", "", false},
 		{`0.0.0.0`, "", "0.0.0.0", "", false},
 		{`127.0.0.1:1234`, "", "127.0.0.1", "1234", false},
@@ -35,6 +37,7 @@ func TestStandardAddress(t *testing.T) {
 		{`https://127.0.0.1`, "https", "127.0.0.1", "443", false},
 		{`http://[::1]`, "http", "::1", "80", false},
 		{`http://localhost:1234`, "http", "localhost", "1234", false},
+		{`http://LOCALHOST:1234`, "http", "localhost", "1234", false},
 		{`https://127.0.0.1:1234`, "https", "127.0.0.1", "1234", false},
 		{`http://[::1]:1234`, "http", "::1", "1234", false},
 		{``, "", "", "", false},
diff --git a/server/server.go b/server/server.go
index d0985351929cd547d0ae8de482183027b0f7caa0..7b9856ef2377b62fb91f1bf2dc12dd3b5a7f7964 100644
--- a/server/server.go
+++ b/server/server.go
@@ -13,6 +13,7 @@ import (
 	"net/http"
 	"os"
 	"runtime"
+	"strings"
 	"sync"
 	"time"
 )
@@ -301,6 +302,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		host = r.Host // oh well
 	}
 
+	// "The host subcomponent is case-insensitive." (RFC 3986)
+	host = strings.ToLower(host)
+
 	// Try the host as given, or try falling back to 0.0.0.0 (wildcard)
 	if _, ok := s.vhosts[host]; !ok {
 		if _, ok2 := s.vhosts["0.0.0.0"]; ok2 {