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

求助:Azure Windows Docker容器部署Django应用时动态IP引发的ALLOWED_HOSTS错误解决方法

解决Azure App Service动态IP导致Django ALLOWED_HOSTS报错的问题

我之前也碰到过一模一样的问题,Azure的动态IP确实挺头疼的,不过有几个靠谱的解决方案,不用每次改IP折腾:

方案一:配置Django信任Azure的反向代理(最推荐)

Azure App Service本质是通过反向代理把外部请求转发到你的容器里的,所以容器收到的HTTP_HOST其实是内部的动态IP,而不是用户实际访问的域名。这时候我们需要让Django识别并信任这个代理:

  1. 在settings.py里添加以下配置:
    # 告诉Django使用反向代理传来的真实主机头
    USE_X_FORWARDED_HOST = True
    # 让Django识别Azure转发的HTTPS协议(避免协议识别错误)
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    
  2. 然后把你的App Service固定域名加到ALLOWED_HOSTS里,比如:
    ALLOWED_HOSTS = [
        "your-app-name.azurewebsites.net",
        # 如果有自定义域名,也一并加上
        "www.your-custom-domain.com"
    ]
    
    这样Django就会用反向代理传来的X-Forwarded-Host(也就是你的真实访问域名)做主机头校验,再也不会管内部的动态IP了。

方案二:用环境变量动态配置ALLOWED_HOSTS

如果你不想硬编码域名,或者需要灵活调整,可以用Azure的应用设置来注入ALLOWED_HOSTS:

  1. 在settings.py里读取环境变量:
    import os
    # 从环境变量读取,多个域名用逗号分隔
    ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "").split(",")
    
  2. 登录Azure门户,找到你的App Service,进入配置 > 应用设置,添加一个新的应用设置:
    • 名称:ALLOWED_HOSTS
    • 值:your-app-name.azurewebsites.net,www.your-custom-domain.com(多个域名用逗号分隔)
      这样每次部署都不用改代码,直接在门户里调整即可。

重要提醒

  • 绝对不要在生产环境把ALLOWED_HOSTS设为*,这会带来主机头攻击的安全风险,一定要指定明确的域名。
  • 如果你的应用需要处理Azure的健康检查请求,上面的配置已经足够覆盖,因为健康检查请求也会通过反向代理转发,Django会识别正确的主机头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:29:05