Python中在良心云上部署nginx + uwsgi + django时,首页正常但admin管理后台404,是哪里配置出错了吗?
我在nginx中的配置如下:
server {
listen 80 default_server;
listen 118.24.***.*** default_server;
location / {
try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /root/test1/test2/static/;
}
我的uwsgi.ini的配置如下:
[uwsgi]
socket=0.0.0.0:8000
#http=:8000
chdir=/root/test1
wsgi-file=test1/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
Python中在良心云上部署nginx + uwsgi + django时,首页正常但admin管理后台404,是哪里配置出错了吗?
把 try_files 那行删掉试试
这个问题很典型,通常是uWSGI的静态文件路径没配好,Django的admin后台依赖静态文件(CSS、JS)。
核心问题是:uWSGI进程没权限或者没找到Django的静态文件,导致admin页面引用的/static/admin/ 这些资源404,页面就崩了。
关键检查点就两个:
-
Django的静态文件收集了吗? 在部署服务器上,确保你已经运行了收集命令,并且
STATIC_ROOT设置正确。python manage.py collectstatic这会把admin的静态文件从Python包复制到你指定的
STATIC_ROOT目录(比如/var/www/myproject/static/)。 -
Nginx配置里代理静态文件了吗? 你的Nginx配置里必须有专门处理
/static/和/media/路径的location块,直接由Nginx提供文件,而不是转发给uWSGI。检查你的nginx site配置,必须有类似下面的部分:server { listen 80; server_name your_domain.com; location /static/ { alias /var/www/myproject/static/; # 这里必须和你的STATIC_ROOT完全一致 expires 30d; } location /media/ { alias /var/www/myproject/media/; } location / { include uwsgi_params; uwsgi_pass unix:/path/to/your/mysocket.sock; # 或者 127.0.0.1:8000 } }重点:
alias后面的路径必须以/结尾,且必须和collectstatic的目录完全一致。
快速诊断步骤:
- 直接浏览器访问
http://your-server/static/admin/css/base.css。如果也404,那就100%是上面说的静态文件问题。 - 如果这个CSS文件能访问,但admin页面还是404,那可能是Django的
urls.py没包含admin路径,或者uWSGI进程权限问题(比如无法读取app目录)。不过从“首页正常”来看,这种情况较少。
一句话总结: 九成是Nginx没配好静态文件代理,或者collectstatic没做。
良心云是什么云平台?
腾讯云,良心云
谢谢,的确可以了,不过有个疑问,我把静态文件放在上面所写的目录下,访问 admin 时,js 和 css 会抱 403 错误,我只有在把文件放在 var/www/static 目录下后,更改 nginx 配置,才能成功访问
你再服务器上面有收集静态文件吗?使用 collectstaic 命令?
有收集静态文件,/root/test1/test2/static/这个项目目录下新建的文件,然后静态文件都收集到这里了,然后配置按照上面的配置,css 和 js 请求会出现 403,然后我把收集到的静态文件复制了一份到 /var/www/static/目录下,nginx 配置中修改为<br>location /static {<br> #alias /root/test1/test2/static/;<br> alias /var/www/static/;<br> }<br>
这样才正常了
这个 alias /root/test1/test2/static/改成 alias /root/test1/test2 试试
test2 已经设置了 777 权限了,不知道是不是你说的 nginx 的权限?
应该是权限的问题,要确保 nginx 有权限访问那个目录的文件
再看看 static 和 static 里面文件的权限
额,把里面的子文件权限都调到 777 可以了,有个疑问 var/www/下的为何权限不够也可以??
一般确保执行 collectstatic 操作的用户和 nginx 的运行用户在一个组里,然后设置该组有读取 static 的权限。权限问题很麻烦,我也记不住,只能出问题的时候去看看相关用户和目录文件的设置。
谢谢,受教了

