Как заставить движок приложения Google использовать протокол https ssl? - PullRequest
0 голосов
/ 15 апреля 2020

У меня развернуто веб-приложение flask на движке приложений Google. Тем не менее, это не заставляет мою ссылку на https. Однако, если я обновлю sh, он будет go до версии ssl https. Но пользователь все еще может удалить s и вернуться обратно в версию http. Есть ли способ полностью удалить протокол http на моем сайте и перенаправить его на версию ssl. Вот файл app.yaml, который я использую в настоящее время. Я также попытался добавить в redirect_http_response_code: 301 без удачи удалить протокол http

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3.7

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

handlers:
- url: /.*
  secure: always
  script: auto

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Я предпочитаю не устанавливать дополнительные программные пакеты для относительно простых вещей, поэтому я делаю это сам. Для GAE flex есть несколько вещей, с которыми нужно справиться. Я добавил комментарии ниже, чтобы помочь объяснить.

@app.before_request
def redirect_http():
    # http -> https 
    if (
        # Flask tells us when request is http. This might not be needed for you but
        # I need it because I use this code for GAE standard as well.
        not request.is_secure and 
        # Load balancers forward https requests as http but set headers to let you 
        # know that original request was https
        not request.headers.get('X-Forwarded-Proto') == 'https' and 
        # GAE cron urls must be http
        not request.path.startswith("/cron")
        ): 
        return redirect("https" + request.url[4:], code=301)
    # naked domain -> www
    if request.url.startswith("https://example.com"):
        return redirect('https://www.' + request.url[8:], code=301)

Пакеты Flask, рекомендованные @tzovourn, также делают и другие важные вещи, так что вы можете подумать об этом (я лично все эти вещи сам, так как это не сложно сделать).

0 голосов
/ 15 апреля 2020

Я заметил, что вы используете App Engine Flexible. Согласно документации , настройка secure: always в app.yaml не работает для App Engine Flexible.

Документация рекомендует защитить ваши HTTP-запросы с помощью библиотеки Flask Talisman.

Другой способ настроить приложение Flask на перенаправление всех входящих запросов в HTTPS. использовать расширение Flask -SSLify

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