使用django+fastcgi-debian从nginx提供静态文件



当谈到用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在尝试访问http://127.0.0.1/static/时都会抛出404未找到错误。

文件结构如下:

/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/"

如果有人能为我们指明正确的方向,那就太棒了。

root /static

这不应该是/home/user/site/static吗?

根据Jim的回答找到了解决方案。

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/images/.

检查使用"root"one_answers"alias"之间的区别。基本上,在使用"root"的情况下,"location"(/static/(旁边的路径会附加在路径中,而在使用"alias"的情况中,它会被忽略。

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

我甚至更喜欢使用http://host/static/images作为提供静态图像的URL。通过这种方式,它遵循Django文档管理静态文件,该文档建议为静态文件使用前缀。否则,您的项目和应用程序文件夹中会有多个不同静态内容的文件夹。

相关内容

  • 没有找到相关文章

最新更新