From 2aaaa368bbba5f85ab87b179026b3c74988481cd Mon Sep 17 00:00:00 2001 From: Alexander Danilov Date: Thu, 17 May 2018 03:12:26 +0300 Subject: [PATCH] Add REQUEST_SCHEME to fastcgi envs Fixes https://github.com/mholt/caddy/issues/2152 --- caddyhttp/fastcgi/fastcgi.go | 6 ++++++ caddyhttp/fastcgi/fastcgi_test.go | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/caddyhttp/fastcgi/fastcgi.go b/caddyhttp/fastcgi/fastcgi.go index e5430c07..f5c80dc5 100644 --- a/caddyhttp/fastcgi/fastcgi.go +++ b/caddyhttp/fastcgi/fastcgi.go @@ -285,6 +285,11 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string] // Retrieve name of remote user that was set by some downstream middleware such as basicauth. remoteUser, _ := r.Context().Value(httpserver.RemoteUserCtxKey).(string) + requestScheme := "http" + if r.TLS != nil { + requestScheme = "https" + } + // Some variables are unused but cleared explicitly to prevent // the parent environment from interfering. env = map[string]string{ @@ -301,6 +306,7 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string] "REMOTE_IDENT": "", // Not used "REMOTE_USER": remoteUser, "REQUEST_METHOD": r.Method, + "REQUEST_SCHEME": requestScheme, "SERVER_NAME": h.ServerName, "SERVER_PORT": h.ServerPort, "SERVER_PROTOCOL": r.Proto, diff --git a/caddyhttp/fastcgi/fastcgi_test.go b/caddyhttp/fastcgi/fastcgi_test.go index fa45ec05..12d4918d 100644 --- a/caddyhttp/fastcgi/fastcgi_test.go +++ b/caddyhttp/fastcgi/fastcgi_test.go @@ -248,6 +248,12 @@ func TestBuildEnv(t *testing.T) { envExpected["SCRIPT_NAME"] = "/fgci_test.php" envExpected["SCRIPT_FILENAME"] = filepath.FromSlash("/fgci_test.php") testBuildEnv(r, rule, fpath, envExpected) + + // 8. Test REQUEST_SCHEME in env + r = newReq() + envExpected = newEnv() + envExpected["REQUEST_SCHEME"] = "http" + testBuildEnv(r, rule, fpath, envExpected) } func TestReadTimeout(t *testing.T) {