nginx 不提供管理静态文件?

tot*_*ico 8 nginx django

澄清以下错误仅针对admin静态文件,即特定于Django admin对应的静态文件。其余的静态文件工作正常。

问题

基本上,我无法使用 ngix 服务器访问管理静态文件

它确实与 Django 的微型服务器一起工作,并且collectstatic正在完成它的工作,这意味着它将文件放在静态文件夹中的预期位置。

网址是正确的,但我无法直接访问管理静态文件,但其他人可以。因此,例如:

  1. 我可以访问这个网址(在浏览器中复制它): myserver.com:8080/static/css/base/base.css

  2. 但我无法访问这个其他 url(在浏览器中复制它): myserver.com:8080/static/admin/css/admin.css


我尝试了什么?

不工作,如果我复制admin/的目录结构为__other_admin_directory_name/__,然后我访问 myserver.com:8080/static/__other_admin_directory_name__/css/admin.css

而且,

  1. 我检查了权限,一切都很好。
  2. 我试图将 ADMIN_MEDIA_PREFIX = '/static/admin/' 更改为 ADMIN_MEDIA_PREFIX = '/static/ other_admin_directory_name /',它不起作用。

最后,这似乎是一个重要的线索:

我试图将admin/目录结构复制到__admin_and_then_any_suffix/__. 然后我无法访问 myserver.com:8080/static/__admin_and_then_any_suffix/__/css/admin.css. 因此,如果目录的名称以admin(例如管理或admin2)开头,则它不起作用


编辑 - 添加感谢@sarnold 观察:

问题似乎出在nginx配置文件/etc/nginx/sites-available/mysite

location /static/admin {
   alias /home/vl3/.virtualenvs/vl3/lib/python2.7/site-packages/django/contrib/admin/media/;
}
Run Code Online (Sandbox Code Playgroud)

小智 20

我的建议:

  1. 使用 django 1.3+(现在不推荐使用 ADMIN_MEDIA_PREFIX

  2. 同时设置STATIC_URLSTATIC_ROOT在您的settings.py

  3. 在 nginx conf 中只定义一个静态条目(带有尾部斜杠)。不需要第二个地址static/admin/

    location /static/  {
            alias /path/to/static/;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用collectstatic哪个应该收集 admin -> static/admin。它将与您收集的所有其他静态媒体位于同一位置。

    python manage.py collectstatic