You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django部署GAE如何配置ALLOWED_HOSTS支持所有版本域名访问

问题原因

Django的ALLOWED_HOSTS子域通配规则是按DNS点分层级匹配的,GAE的版本域名[版本号]-dot-myapp.ey.r.appspot.com从DNS层级上属于ey.r.appspot.com的子域,你原有配置仅添加了主应用域名,自然会拦截所有版本域名的访问请求。
不需要担心通配范围过大的安全问题:GAE前端网关会先做路由校验,只有目标Host属于你当前项目的请求才会被转发到Django实例,同域下其他用户项目的请求根本不会到达你的应用,不存在Host头攻击风险。

配置方法

修改现有GAE环境分支的配置,将.ey.r.appspot.com加入允许主机列表,同时给CSRF_TRUSTED_ORIGINS添加对应通配源即可,另外建议补充代理SSL头配置,避免GAE反向代理场景下出现HTTPS重定向循环。
修改后的完整配置代码如下:

from urllib.parse import urlparse

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,
        '.ey.r.appspot.com',  # 匹配所有GAE分配的版本、服务级别的appspot域名
        'my-personal-domain.com'
    ]
    CSRF_TRUSTED_ORIGINS = [
        APPENGINE_URL,
        'https://*.ey.r.appspot.com',  # Django 4.0+原生支持该通配格式,覆盖所有版本域名的HTTPS源
        'https://my-personal-domain.com'
    ]
    # 识别GAE反向代理传递的HTTPS标识,避免重定向死循环
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    SECURE_SSL_REDIRECT = True
else:
    ALLOWED_HOSTS = ["*"]
补充说明
  • 如果你使用的Django版本低于4.0,CSRF_TRUSTED_ORIGINS暂不支持*通配符,可以通过读取GAE内置的版本、服务环境变量动态拼接允许源列表,更简单的方案是直接升级Django到稳定新版本。
  • 如果后续切换GAE部署区域,只需要把配置里的ey.r.appspot.com替换为对应区域的appspot域名后缀即可。

内容的提问来源于stack exchange,提问作者Basley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:12:29