#google-cloud-platform #google-cloud-run
# #google-облачная платформа #google-запуск в облаке
Вопрос:
У меня есть простое контейнерное веб-приложение (Nginx, поддерживающее HTML и Javascript), которое я развернул в Google Cloud Run.
Проблема в том, что я, похоже, не могу принудительно установить HTTPS-соединения, хотя я уже проверил и обновил записи DNS для этого. Пользователь по-прежнему может получить доступ к незащищенной конечной точке http приложения my Cloud Run, если захочет.
Как настроить службу запуска Google Cloud, которая заставляет или перенаправляет пользователей использовать HTTPS?
Комментарии:
1. Мне непонятно, что вы здесь наблюдаете. Вы можете использовать HTTP или HTTPS только через один порт, а не оба одновременно.
2. @DougStevenson Облачный запуск потенциально может позволить пользователям принудительно использовать HTTPS, перенаправляя все http-запросы на https.
3. Бешой, я немного отредактировал вопрос, чтобы убрать ненужные части, дайте мне знать, если он потеряет смысл.
Ответ №1:
LB отправляет вызываемый заголовок X-Forwarded-Proto
, который содержит либо http
или https
, чтобы вы могли легко перенаправить 301 Moved Permanently
его, если обнаружите это.
Пример для отредактированного вопроса с помощью Nginx: http://scottwb.com/blog/2013/10/28/always-on-https-with-nginx-behind-an-elb /
Пример кода Go:
func main() {
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
if request.Header["X-Forwarded-Proto"][0] == "http" {
http.Redirect(writer, request, "https://" request.Host request.RequestURI, http.StatusMovedPermanently)
return
}
fmt.Printf("Request: % v, headers: % v n", request, request.Header)
writer.Write([]byte("hello world"))
})
http.ListenAndServe(":" os.Getenv("PORT"), nil)
}
Комментарии:
1. Никакого контроля над LB, поскольку, по сути, Cloud Run — это оригинальный Paas.
2. Вам не нужно ничего контролировать. Эти заголовки отправляются вам LB, поэтому все, что вам нужно сделать, это вернуть 301 перенаправление всякий раз, когда вы обнаружите, что
3. Моя ошибка. Я должен был указать в своем вопросе, что единственным кодом, выполняемым в контейнере, является transpiled javascript. Этот ответ — это то, над чем я мог бы поработать, чтобы реализовать.
4. В этом случае в контейнере должен быть запущен какой-то HTTP-сервер, который обслуживает файлы. Вы также можете использовать Nginx или другие серверы для обнаружения такой конфигурации и перенаправления
5. scottwb.com/blog/2013/10/28 / … строки 27 и 34-36 выглядят так, как будто у них есть ответ