Google Cloud Platform,Golang Flexible Environment仅适用于自定义域的HTTPS

时间:2017-05-02 23:56:54

标签: google-app-engine ssl go https google-cloud-platform

我只是在GCP上运行gcloud app deploy命令就可以毫不费力地部署我的应用程序。这将灵活的环境视为默认环境。昨天我做了必要的自定义,为ssl的这个应用程序提供自定义域名。目前,当我转到http://example.comhttps://example.com中的任何一个时,它都有效,但我也想强迫人们使用https。目前,http请求按原样工作,我希望它们被定向到https。我希望将任何用户引导至https://example.com,当他们尝试使用http访问网站时,或者根本不使用任何内容,例如example.com。如何实现这一目标?

这是我的app.yaml

api_version: go1
env: flex
runtime: go

我已尝试使用handlers and secure属性,但似乎它们对灵活环境无效。

感谢。

1 个答案:

答案 0 :(得分:2)

目前,灵活的环境不支持仅使用app.yaml进行HTTPS定位。但是,这可以通过使用像这样的函数在服务器代码中实现,

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

我使用negroni将此函数包装到我的处理程序。

可以在此处找到工作示例:https://github.com/malisit/munhasir