1

当谈到使用 django 1.3 提供静态文件的新方式时,我有点生疏,但我敢肯定,这里的问题不可能是 django。

我正在尝试在安装了 debian 的云服务器上运行带有 nginx + fastcgi 的 django 应用程序。我们目前只有一台服务器(在我们开发时),并且将寻求使用负载均衡器运行多台服务器以使其更简单一些,但是实际上我在让 nginx 服务静态文件时遇到了麻烦。

我已经按照各种教程设置 nginx.conf 来提供文件

server {
    listen 80;
    server_name 127.0.0.1;

    location /static  {
        autoindex on;
        root /static;
    }
}

以上是 nginx.conf 的摘录。现在无论我将 root 设置为什么,nginx 在尝试访问时都会抛出 404 not found 错误http://127.0.0.1/static/

文件结构如下:

/home/user/site/project
/home/user/site/static
/home/user/site/templates

Django settings.py 具有以下设置为 STATIC_ROOT 和 STATIC_URL

STATIC_ROOT = "/home/user/site/static/"
STATIC_URL  = "http://127.0.0.1/static/"

如果有人能指出我们在哪里做这件事的正确方向,那就太棒了。

4

4 回答 4

3
root /static

这不应该/home/user/site/static取而代之吗?

于 2011-07-13T18:49:12.637 回答
1

根据上面吉姆的回答,找到了解决方案。

root /static 

现在已更改为:

root /home/user/site/static

然而,然后检查日志,似乎 nginx 试图在http://127.0.0.1/static定位的路径是 /home/user/site/static/static/ 这显然是不正确的。

我不确定这是否是正确的方法,但是我现在将所有静态文件都指向根目录(消除了 url 中对 /static 的需要。所以对于 /static/images 我现在只需将其指向http://127.0。 0.1/图像/

于 2011-07-13T20:47:18.540 回答
1

检查使用“ root ”或“别名”之间的区别。基本上在使用“root”的情况下,“位置”(/static/)旁边的路径会附加到路径中,而在“别名”的情况下,它将被忽略。

于 2013-01-07T10:07:51.007 回答
0

查看指令的文档,root与 Apache 的 alias 指令相比,位置匹配没有被丢弃。因此,当您指定位置时static,您定义为根目录的文件夹必须包含该static文件夹。所以nginx找/home/user/site/static/static它是故意的行为并没有错。

我什至更喜欢将http://host/static/images其用作提供静态图像的 URL。这样,它遵循 Django 文档管理静态文件,该文档建议为静态文件使用前缀。否则,您有多个文件夹用于不同的静态内容,使您的项目和应用程序文件夹变得混乱。

于 2011-07-13T21:21:26.643 回答