Воспроизведение конфигурации для HTTPS только на Heroku - PullRequest
0 голосов
/ 26 августа 2018

Я искал вокруг и нашел темы, близкие к этому (например, здесь и здесь ), но я все еще не могу заставить это работать, вот и все.

Я использую игру 2.6 и развертывание в Heroku.Я хотел бы заставить приложение использовать только HTTPS.Как указывалось в вышеупомянутом посте , этот фильтр (с правильными настройками Heoku), похоже, должен решить мою проблему.Но я не могу заставить его работать.В основном, если я делаю простую настройку, которую я предлагаю ниже, она не перенаправляет на https, и если я пытаюсь сделать что-то необычное, я получаю ошибки.

Я думаю, что я спрашиваю, как настроить приложение Procfile.Переменные conf и Environment для развертывания в Heroku.Как FYI я использую / я хотел бы иметь возможность использовать самозаверяющие сертификаты play для моих непроизводственных развертываний на случай, если это вызовет проблемы.

===== ДляProcfile ====

Обычно простой Procfile может выглядеть так:



    web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}

Но без heroku я бы хотел сделать что-то подобное (см. здесь )



    play -Dhttp.port=disabled -Dhttps.port=443

Поскольку Heroku автоматически настраивает порт / HTTPS, как мне объединить эти два?т. е. есть ли в качестве героев env var вроде ${HTTPS_PORT}, который я должен использовать?

===== Для application.conf ====

Предположительно, мы хотим что-то вроде этого



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.filters.https.redirectEnabled = true

"play.filters.https.redirectEnabled = true" не нужно, но я поставил его на всякий случай.Но мне также нужно указать play.filters.https.port?(см. здесь ).Примерно так:



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.filters.https.redirectEnabled = true
    play.filters.https.port=???


Заранее спасибо.

==== Редактировать ===

Спасибо @codefinger за правильные ответы, которые вы дали.Я собираюсь поместить детали ниже для дальнейшего использования.

Как уже упоминалось здесь , вам нужно указать play, чтобы проверить, был ли запрос уже защищен.В данном случае это, по сути, означает белый список прокси.Таким образом, файл Proc может быть простым:



    web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}

Но вам нужно включить RedirectHttpsFilter и настроить доверенные прокси.Обратите внимание, что я доверял всем IP-адресам, но в зависимости от вашего приложения вы можете ограничить это (подробности здесь ).



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.http.forwarded.trustedProxies=["0.0.0.0/0", "::/0"]

1 Ответ

0 голосов
/ 27 августа 2018

Я думаю, вам нужно включить play.core.server.common.ForwardedHeaderHandler, который будет обнаруживать заголовок X-Forwarded-Proto , который Heroku устанавливает .

Завершение TLS обрабатывается маршрутизатором Heroku, которыйозначает, что все запросы находятся в обычном HTTP, когда они достигают вашего приложения.Единственный способ для вашего приложения узнать, являются ли они HTTP (S), какой заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...