Как перенаправить весь http-трафик на https в Google Cloud Run

У меня есть простое контейнерное веб-приложение (Nginx, обслуживающее HTML и Javascript), которое я развернул в Google Cloud Run.

Проблема в том, что я не могу заставить HTTPS-соединения, хотя я уже проверил и обновил записи DNS для этого. Пользователь по-прежнему может получить доступ к незащищенной конечной точке http моего приложения Cloud Run, если захочет.

Как настроить службу Google Cloud Run, которая заставляет или перенаправляет пользователей на использование HTTPS?


person Beshoy Hanna    schedule 16.04.2019    source источник
comment
Мне непонятно, что вы здесь наблюдаете. Вы можете использовать HTTP или HTTPS только через один порт, но не оба одновременно.   -  person Doug Stevenson    schedule 16.04.2019
comment
@DougStevenson Cloud Run потенциально может позволить пользователям принудительно использовать HTTPS, перенаправляя все HTTP-запросы на https.   -  person Ahmet Alp Balkan    schedule 16.04.2019
comment
Бешой, я немного отредактировал вопрос, чтобы убрать ненужные части, дайте мне знать, если он теряет смысл.   -  person Ahmet Alp Balkan    schedule 16.04.2019


Ответы (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)
}
person petomalina    schedule 16.04.2019
comment
Нет контроля над LB, поскольку Cloud Run по сути является Knative Paas. - person Beshoy Hanna; 16.04.2019
comment
Вам не нужно ничего контролировать. Эти заголовки отправляются вам LB, поэтому все, что вам нужно сделать, это вернуть 301 редирект всякий раз, когда вы обнаружите, что - person petomalina; 16.04.2019
comment
Виноват. Я должен был указать в своем вопросе, что единственный код, работающий в контейнере, - это транспилированный javascript. Я мог бы поработать над этим ответом. - person Beshoy Hanna; 16.04.2019
comment
В этом случае в контейнере должен быть запущен HTTP-сервер, обслуживающий файлы. Вы можете использовать Nginx или другие серверы для обнаружения такой конфигурации и перенаправления. - person petomalina; 16.04.2019
comment
К своему первоначальному вопросу я добавил, что использую Nginx. Кажется, этого легче достичь. - person Beshoy Hanna; 16.04.2019
comment
scottwb.com/blog / 2013/10/28 /, строки 27 и 34–36 выглядят так, будто в них есть ответ. - person petomalina; 16.04.2019