开启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
相关产品推荐
相关产品推荐

