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

Ubuntu18.04部署Django+Nginx+Gunicorn静态文件权限问题求助

解决Ubuntu 18.04上Django部署静态文件权限拒绝问题

核心原因

日志明确显示Permission denied,问题出在Nginx运行用户(默认是www-data)没有权限访问/root目录——/root目录默认权限为700,仅root用户可访问,Nginx进程无法进入该目录读取静态文件。

解决方案

1. 迁移项目到非root目录

将项目从/root/myproject移到适合web服务的目录(如/var/www/),避免root目录的权限限制:

sudo mv /root/myproject /var/www/

2. 修复目录与文件权限

设置项目目录归属为www-data用户(Nginx运行用户),并确保权限正确:

# 递归设置目录所有者
sudo chown -R www-data:www-data /var/www/myproject

# 设置目录权限为755(所有者读写执行,其他读执行)
sudo find /var/www/myproject -type d -exec chmod 755 {} \;

# 设置文件权限为644(所有者读写,其他读)
sudo find /var/www/myproject -type f -exec chmod 644 {} \;

3. 更新Nginx配置

修改Nginx server配置,替换为新的项目路径,同时修正/media路径的匹配问题:

server {
    listen 80;
    server_name localhost;

    location = /favicon.ico { access_log off; log_not_found off; }
    
    location /static/ {
        root /var/www/myproject;
        expires 30d; # 可选:添加静态文件缓存,优化性能
    }

    location /media/ { # 补上末尾的/,避免路径匹配错误
        alias /var/www/myproject/media/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

4. 重新收集静态文件

用www-data用户执行collectstatic,确保静态文件归属正确:

sudo -u www-data python /var/www/myproject/manage.py collectstatic

5. 重启服务

重启Nginx和Gunicorn使配置生效:

sudo systemctl restart nginx
sudo systemctl restart gunicorn

额外注意事项

  • 永远不要将web项目放在/root目录下,这违反安全最佳实践,且会引发权限问题。
  • 检查Gunicorn配置(gunicorn.service),确保其运行用户也是www-data(添加User=www-data和Group=www-data字段),避免后续文件访问权限问题。
  • 验证STATIC_ROOT配置:确保settings.py中STATIC_ROOT = BASE_DIR / 'static'正确,collectstatic确实将文件生成到了/var/www/myproject/static目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:45:12