我在 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
谢谢!
我遇到了同样的问题,我想我找到了一个干净的解决方案。您可以使用以下代码动态查找已部署的版本并将它们添加到 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