2017-05-02 153 views
-1

我已經部署我的應用程序而沒有麻煩,只需在GCP上運行gcloud app deploy命令即可。這將靈活的環境作爲默認設置。昨天我做了必要的自定義設置,爲此應用程序使用ssl創建了一個自定義域。目前它適用於以下任何一種,http://example.com,https://example.com,但我也希望強制人們使用https。目前,http請求按原樣運行,我希望它們可以定向到https。我想讓任何用戶訪問https://example.com,當他們嘗試使用http訪問網站或者根本沒有任何內容時,如example.com。這怎麼能實現?Google雲端平臺,Golang靈活環境HTTPS僅適用於自定義域名

這裏是我的app.yaml

api_version: go1 
env: flex 
runtime: go 

我已經嘗試過使用handlers and secure屬性,但他們似乎並不適用於靈活的環境。

謝謝。

+0

重複的[http://stackoverflow.com/questions/5367974/https-only-in-google-app-engine] –

+0

@PrateekGupta你應該先閱讀在達成這種決定之前的問題。您發佈的問題不涉及靈活的環境。此外,我已經提到,由於靈活的環境情況,提供的解決方案無法正常工作。 – malisit

回答

0

目前,靈活的環境不支持僅使用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 { 
     next(w, r) 
     target := "https://" + r.Host + r.URL.Path 

     http.Redirect(w, r, target, 
      http.StatusTemporaryRedirect) 
    } 
} 

我包這個功能,我用的處理程序negroni

工作實例可以在這裏找到:https://github.com/malisit/munhasir