Google App Engine 上的 Django 将版本 URL 添加到 ALLOWED_HOSTS

问题描述 投票:0回答:1

我在 GAE 上托管,希望能够访问不同的版本而不升级它们。目前,我收到 400 错误:

Invalid HTTP_HOST header: '1234568-dot-myapp.ey.r.appspot.com'. You may need to add '1234568-dot-myapp.ey.r.appspot.com' to ALLOWED_HOSTS.

如何将 URL 添加到 ALLOWED_HOSTS,以便我可以访问我的应用程序的任何版本? 目前,我的 ALLOWED_HOSTS 如下所示:

APPENGINE_URL = env("APPENGINE_URL", default=None)
if APPENGINE_URL:
    if not urlparse(APPENGINE_URL).scheme:
        APPENGINE_URL = f"https://{APPENGINE_URL}"

    ALLOWED_HOSTS = [urlparse(APPENGINE_URL).netloc,
                     'my-personal-domain.com']
    CSRF_TRUSTED_ORIGINS = [APPENGINE_URL,
                            'https://my-personal-domain.com']
    SECURE_SSL_REDIRECT = True
else:
    ALLOWED_HOSTS = ["*"]

据我了解,通配符仅适用于子域。如何将这样的内容添加到允许的主机中?

[version-number]-dot-myapp.ey.r.appspot.com

谢谢!

django google-app-engine
1个回答
0
投票

我遇到了同样的问题,我想我找到了一个干净的解决方案。您可以使用以下代码动态查找已部署的版本并将它们添加到 ALLOWED_HOSTS 变量中(假设您的服务 ID 为“默认”):

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials    

APPENGINE_URL = env("APPENGINE_URL", default=None)
if APPENGINE_URL:
    # Ensure a scheme is present in the URL before it's processed.
    if not urlparse(APPENGINE_URL).scheme:
        APPENGINE_URL = f"https://{APPENGINE_URL}"

    main_url_netloc = urlparse(APPENGINE_URL).netloc
    ALLOWED_HOSTS = [main_url_netloc]

    # Get app engine versions to allow their URLs
    credentials = GoogleCredentials.get_application_default()
    service = discovery.build('appengine', 'v1', credentials=credentials)
    versions = service.apps().services().versions().list(
        appsId='your-project-id', servicesId="default").execute()['versions']
    for version in versions:
        ALLOWED_HOSTS.append(f"{version['id']}-dot-{main_url_netloc}")

当然,您需要将以下内容添加到您的requirements.txt 文件中:

google-api-python-client
oauth2client
© www.soinside.com 2019 - 2024. All rights reserved.