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

Django+Nginx部署时静态文件加载失败问题求助

Django + Nginx 静态文件404问题排查与解决

根据你提供的信息,页面能正常加载但静态文件返回404,已尝试常规操作未解决,以下是针对性排查步骤:

1. 确认静态文件是否已被正确收集到STATIC_ROOT

首先验证/opt/proj/staticfiles下是否存在缺失的静态文件:

# 检查css目录及文件
ls -l /opt/proj/staticfiles/css/
# 检查js目录及文件
ls -l /opt/proj/staticfiles/js/

如果文件不存在,重新执行collectstatic并观察输出是否有错误:

cd /opt/proj/proj
python manage.py collectstatic --noinput

若出现权限错误,确保执行用户(appusr)对/opt/proj/staticfiles有写入权限,必要时可使用sudo执行(注意执行后修正文件归属:sudo chown -R www-data:www-data /opt/proj/staticfiles)。

2. 检查Nginx配置与生效状态

2.1 验证Nginx静态路径配置

你的location /static/配置使用alias,结尾斜杠匹配正确,但需确保Nginx进程能访问该目录。检查Nginx错误日志:

tail -f /var/log/nginx/error.log

若出现permission denied,需确认上级目录权限:/opt/proj权限为drwxrwxr-x,www-data组可正常访问,若仍有问题,检查系统SELinux状态(仅CentOS/RHEL系列):

getenforce

若输出Enforcing,临时关闭测试:

sudo setenforce 0

若静态文件可访问,需永久配置SELinux规则:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/proj/staticfiles(/.*)?"
sudo restorecon -Rv /opt/proj/staticfiles

2.2 确认Nginx配置已生效

修改配置后必须重新加载或重启Nginx:

sudo systemctl reload nginx
# 或重启
sudo systemctl restart nginx

使用nginx -T查看完整生效配置,确认pense.ai的server块中/static/规则在/规则之前:

sudo nginx -T

3. 验证Django静态配置与模板引用

3.1 检查STATIC_URL设置

确保settings.py中STATIC_URL与Nginx配置匹配:

STATIC_URL = '/static/'

若此值被修改为其他路径(如/staticfiles/),会导致Nginx无法匹配请求。

3.2 检查模板静态文件引用方式

确保模板中正确使用Django静态标签:

{% load static %}
<link rel="stylesheet" href="{% static 'css/login-style.css' %}">
<script src="{% static 'js/login.js' %}"></script>

避免直接硬编码路径(如/static/css/login-style.css),除非完全确认STATIC_URL与路径一致。

4. 验证请求路由是否匹配正确的Nginx Server块

使用curl测试静态文件请求,指定Host头确保匹配到目标server块:

curl -H "Host: pense.ai" http://181.177.55.120/static/css/login-style.css

观察返回结果,同时查看/var/log/nginx/proj.log是否有该请求记录。若无记录,说明请求未匹配到pense.ai的server块,需检查Nginx默认server配置。


内容的提问来源于stack exchange,提问作者Meu nome não é Johnny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:44:58