smi*_*omb 2 django nginx gunicorn django-staticfiles
404 URL 示例:
http://ip.address/static/admin/css/base.css
我不确定我做错了什么。这是关联的文件:
设置.py
STATICFILES_DIRS = [
'/home/username/sitename/sitenameenv/lib/python3.5/site-packages/django/contrib/admin/static',
]
STATIC_URL = '/static/'
STATIC_ROOT = '/home/username/sitename/website/staticroot/'
Run Code Online (Sandbox Code Playgroud)
Nginx 配置:
server {
listen 80;
server_name http://ip.address/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/username/sitename/website/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/username/sitename/sitename.sock;
}
}
Run Code Online (Sandbox Code Playgroud)
常规静态文件正在正确提供,并且在我添加STATIC_ROOT和使用之前它们也在这样做collectstatic,我认为这是没有必要的。不过,我的管理员因其静态文件而收到 404 错误。
更新:
运行collectstatic将收集设置指定的目录中的所有文件STATIC_ROOT。
因此,您需要配置 Nginx 服务器来为您的STATIC_ROOT文件夹提供以下/satic/url 服务:
location /static/ {
# using `alias` instead of `root`
# vvv
alias /home/username/sitename/website/staticroot/;
# ^^^
# the full path to the STATIC_ROOT directory
}
Run Code Online (Sandbox Code Playgroud)
旧版本(不是很有用):
为什么会发生这种情况?
这里有一件重要的事情需要注意:Django 不提供静态文件。我相信你知道这一点。
因此,当您的浏览器从 - 请求管理 css 文件时 http://ip.address/static/admin/css/base.css,该请求会被您的 Nginx 服务器拦截,因为您已将/static/路径映射到该目录 - /home/username/sitename/website/static/。
现在,接下来发生的是,Nginx 将尝试/admin/css/base.css在/home/username/sitename/website/static/. 但那里没有任何admin目录,因此该请求最终作为404.
如何解决这个问题?
您可以将/static/admin/url 映射到该目录admin实际所在的目录。例子:
# put this before `location /static/` conf
location /static/admin/ {
root /home/username/sitename/sitenameenv/lib/python3.5/site-packages/django/contrib/admin/;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3079 次 |
| 最近记录: |