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

开启Debug=False后图片消失:Django+Nginx部署问题求助

部署Django网站Debug=False后图片消失问题解决

问题现象

开启Debug=False后网站图片无法加载,查看Nginx错误日志发现路径匹配错误。

Nginx错误日志

2023/03/06 11:17:39 [error] 646224#646224: *15 open() "/home/egor/mysite/PersonalPortfolio-project/staticportfolio/image/django_certificate-1.png" failed (2: No such file or directory), client: 109.198.191.208, server: zyoger.ru, request: "GET /media/portfolio/image/django_certificate-1.png HTTP/1.1", host: "www.zyoger.ru", referrer: "http://www.zyoger.ru/about"
2023/03/06 11:17:39 [error] 646224#646224: *14 open() "/home/egor/mysite/PersonalPortfolio-project/staticportfolio/image/python_certificate-1.png" failed (2: No such file or directory), client: 109.198.191.208, server: zyoger.ru, request: "GET /media/portfolio/image/python_certificate-1.png HTTP/1.1", host: "www.zyoger.ru", referrer: "http://www.zyoger.ru/about"

Nginx配置

Server块配置

server {
    listen 80;
    server_name zyoger.ru www.zyoger.ru zyoger.online www.zyoger.online;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/{
        autoindex on;
        alias /home/egor/mysite/PersonalPortfolio-project/static;
    }
    location /media/{
        autoindex on;
        alias /home/egor/mysite/PersonalPortfolio-project/static;
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

全局配置片段

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

Django配置

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

问题分析与解决方案

核心问题

从错误日志可见,请求/media/portfolio/image/xxx.png时,Nginx尝试在/home/egor/mysite/PersonalPortfolio-project/staticportfolio/image/路径查找文件——这是因为Nginx的/media/ location配置中,alias错误指向了static目录,且alias末尾未加/,导致路径拼接异常。

修复步骤

  • 修正Nginx的/media/路径配置
    将/media/的alias改为Django配置中MEDIA_ROOT对应的实际路径,且末尾添加/避免路径拼接错误:

    location /media/ {
        autoindex on;
        alias /home/egor/mysite/PersonalPortfolio-project/media/;
    }
    
  • 确保媒体目录权限正确
    执行命令赋予Nginx运行用户www-data媒体目录的读写权限:

    chown -R www-data:www-data /home/egor/mysite/PersonalPortfolio-project/media
    
  • 重启Nginx服务
    使配置生效:

    sudo systemctl restart nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:43:14