Nginx与Django部署中媒体文件无法访问的问题求助
问题分析与解决方案
从你的错误日志里一眼就能看到关键问题:Nginx尝试访问的路径是/home/user/project/test/media/media/sized/products/picture.JPG——路径里重复了一层media,这就是文件找不到的核心原因。
为什么会出现路径重复?
你的Nginx配置里,location /media的root设置成了/home/user/project/test/media/,而当用户请求/media/sized/...时,Nginx会自动把root路径和请求路径拼接起来:
root路径 + 请求路径 = /home/user/project/test/media/ + /media/sized/...
结果就多出了一层media,和你的实际文件路径不匹配。
直接修正方案
把location /media的root改成/home/user/project/test/,也就是media目录的父目录。修正后的配置块如下:
location /media { root /home/user/project/test/; expires 1d; autoindex on; }
这样拼接后,请求/media/sized/products/picture.JPG就会对应到正确的路径:/home/user/project/test/media/sized/products/picture.JPG,正好和你settings.py里的MEDIA_ROOT一致。
额外需要检查的细节
- 文件真实存在性:确认
/home/user/project/test/media/sized/products/picture.JPG这个文件确实存在,Linux系统区分大小写,注意文件名的大小写是否和请求一致(比如JPG和jpg是两个不同的文件)。 - 权限问题:虽然你换过Nginx用户,但要确保Nginx运行的用户(通常是
www-data)对/home/user/project/test/media目录及其所有父目录有读取权限,对文件本身也有读取权限。可以用ls -l /home/user/project/test/media/sized/products/查看权限,临时测试可以用chmod -R 755 /home/user/project/test/media,测试后记得改回更安全的权限(比如750)。 - 重启Nginx生效:修改配置后一定要执行
sudo systemctl restart nginx让配置生效。
内容的提问来源于stack exchange,提问作者Emile
相关产品推荐
相关产品推荐

