DEBUG=False时Django多应用Nginx下App2媒体文件404问题求助
解决App2媒体文件404的问题
从你的错误日志和配置来看,核心问题是App2生成的媒体文件URL没有带上/app2前缀,导致Nginx错误地去App1的media目录查找文件。下面是具体的修复步骤:
1. 修改App2的MEDIA_URL配置
打开App2的settings.py,把MEDIA_URL从:
MEDIA_URL = 'media/'
改成:
MEDIA_URL = '/app2/media/'
这样App2生成的媒体文件URL就会是/app2/media/attach_1/attach.pdf,而不是原来的/media/attach_1/attach.pdf,就能让Nginx匹配到对应App2的location规则。
2. 确认App2的MEDIA_ROOT正确性
确保App2的MEDIA_ROOT确实指向自己的媒体目录,你的当前配置:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
没问题,只要BASE_DIR是App2项目的根目录(比如/home/user/app2),那么MEDIA_ROOT就是/home/user/app2/media,和Nginx配置的路径完全对应。
3. 修正Nginx的App2代理路径(可选但重要)
你提到App2对应mysite.com/app2,但当前Nginx配置里是location /secondapp/指向App2的sock,这会导致访问/app2/时错误路由到App1。建议把这个location改成:
location /app2/ { include proxy_params; proxy_pass http://unix:/run/app2.sock:/; }
这样访问mysite.com/app2/才会正确路由到App2服务。
4. 重启服务生效
修改完配置后,需要重启相关服务让配置生效:
- 重启App2的Gunicorn服务(根据你的实际启动方式调整):
sudo systemctl restart app2-gunicorn
- 重启Nginx服务:
sudo systemctl restart nginx
这样调整后,App2的媒体文件应该就能被Nginx正确定位,不会再出现404错误了。
内容的提问来源于stack exchange,提问作者Margo




