Azure部署的Django App加载Blob静态文件出现存储账户名重复问题
问题排查与解决步骤
1. 优先检查Azure App Service的应用配置项
登录Azure门户,进入对应App Service的「配置」-「应用程序设置」页,排查是否存在以下环境变量被误配置:
STATIC_URL/MEDIA_URL:如果此处配置了错误的带重复存储账户名的地址,会直接覆盖代码里settings.py的配置,优先级远高于本地代码AZURE_ACCOUNT_NAME/AZURE_STORAGE_ACCOUNT/AZURE_CUSTOM_DOMAIN:如果你使用了django-storages这类Azure存储集成库,只要配置了上述变量,库会自动在静态资源URL前拼接存储账户域名,如果你已经在settings里写了带完整域名的STATIC_URL,就会出现重复拼接的问题。
2. 验证部署环境的实际配置值
通过App Service的SSH功能进入运行容器,执行以下命令确认运行时的STATIC_URL实际值:
# 进入Django项目根目录后启动shell python manage.py shell
在shell中执行:
from django.conf import settings print(settings.STATIC_URL) print(settings.MEDIA_URL)
- 如果输出的地址已经是带重复
myappstorage的错误地址:说明配置被环境变量或其他导入的配置文件覆盖,直接排查上层配置覆盖逻辑即可 - 如果输出的地址是正常的:继续排查下一步
3. 检查存储后端与模板渲染逻辑
- 如果你使用了
django-storages的Azure存储后端,确认是否同时配置了完整STATIC_URL和存储账户参数:如果已经指定了带完整域名的STATIC_URL,请删除所有AZURE_ACCOUNT_NAME/AZURE_CUSTOM_DOMAIN相关配置,避免重复拼接 - 排查是否存在自定义中间件、上下文处理器对静态资源URL做了额外的前缀拼接处理
4. 通用修复方案
如果确认是django-storages的拼接逻辑冲突,可以换用官方推荐的配置方式,避免手动写死完整域名:
# 先配置存储账户参数,删除原有写死的STATIC_URL AZURE_ACCOUNT_NAME = "myappstorage" AZURE_STATIC_CONTAINER = "static" AZURE_MEDIA_CONTAINER = "media" STATIC_URL = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_STATIC_CONTAINER}/" MEDIA_URL = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_MEDIA_CONTAINER}/"
内容的提问来源于stack exchange,提问作者David Louda
相关产品推荐
相关产品推荐

