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

Django+DRF+Docker+Nginx部署时媒体文件返回URL异常问题咨询

解决方案

问题核心是经过两层Nginx反向代理后,Django服务无法获取到用户真实请求的域名、协议信息,生成媒体URL时使用了内层代理的地址,按以下步骤修改即可:

1. 修改宿主机Nginx站点配置

编辑nginx/sites-enabled/my-api文件,在location /代理块内补充请求头传递配置:

location / {
    proxy_pass http://127.0.0.1:8337;
    # 新增以下配置
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
}

修改完成后执行nginx -s reload重载配置生效。

2. 修改Django项目settings配置

在你的DRF项目配置文件中新增/调整以下参数:

# 允许从X-Forwarded-Host头获取真实域名
USE_X_FORWARDED_HOST = True
# 识别HTTPS协议标记
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 补充信任的域名,注意替换为你的实际域名
ALLOWED_HOSTS = ['my-domain.com']
# 确认媒体URL配置正确
MEDIA_URL = '/mediafiles/'
# Django 4.0+版本需要额外添加CSRF信任源配置
CSRF_TRUSTED_ORIGINS = ['https://my-domain.com']

3. 重启容器服务

重新构建启动web和nginx容器,让Django配置生效:

docker-compose up -d --force-recreate web nginx

修改完成后再次访问接口,user_picture字段就会返回以https://my-domain.com开头的正确URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:45:01