Reputation: 1258
I have deployed my application without hassle just by running gcloud app deploy
command on GCP. Which takes the flexible environment as default. Yesterday I made the necessary customizations to have a custom domain for this app with ssl. Currently it works when I go to any of the following, http://example.com
, https://example.com
but I also want to force people to use https. Currently the http requests work as they are, I want them to be directed to https. I want to direct any user to https://example.com
when they try to go to the website with http or without anything at all like example.com
. How can this be achieved?
Here's my app.yaml
:
api_version: go1
env: flex
runtime: go
I already tried to use handlers and secure
attributes but it seems they are not valid for flexible environment.
Thanks.
Upvotes: 1
Views: 379
Reputation: 1258
Currently, flexible environment does not support HTTPS only directing by using app.yaml
. However, this can be achieved in the server code by using a function like this,
func directToHttps(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
if r.URL.Scheme == "https" || strings.HasPrefix(r.Proto, "HTTPS") || r.Header.Get("X-Forwarded-Proto") == "https" {
next(w, r)
} else {
target := "https://" + r.Host + r.URL.Path
http.Redirect(w, r, target,
http.StatusTemporaryRedirect)
}
}
I wrapped this function to my handlers with negroni
.
Working example can be found here: https://github.com/malisit/munhasir
Upvotes: 2