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

