2011-07-13 115 views
1

当我提到django 1.3的静态文件服务的新方式时,我有点生疏,但是我确信它不能是django,因为这里有错。使用django + fastcgi从nginx提供静态文件debian

我试图在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/" 

如果任何人都可以在正确的方向指向我们在哪里这样做,这将是太棒了。

回答

1

根据Jim的回答,找到了解决办法。

root /static 

现已改为:

root /home/user/site/static 

然而然后检查它似乎是路径的nginx试图找到位于http://127.0.0.1/static为/ home/user中/网站/静态/静态/日志这显然是不正确的。

我不确定这是否是正确的方法,但我现在将所有静态文件指向根目录(删除/静态在URL中的需要。因此对于/静态/图像我现在只需指向它http://127.0.0.1/images/

3
root /static 

是不是应该这样/home/user/site/static呢?

+0

你会这么认为吉姆,但不管我有什么,因为它没有奏效。 –

+0

日志文件说什么?该目录及其父目录的权限是什么?什么用户是'nginx'运行的? – Jim

+0

静态目录是0755我已经将root/static重新更改为/ home/user/site/static并且仍然没有快乐。 –

0

退房的root指令的文档,而相比之下,Apache的别名指令,位置匹配不掉线。所以,当你指定位置static你定义为你的根必须包含static文件夹。因此,这不是错误,nginx正在寻找/home/user/site/static/static这是故意的行为。

我甚至会更喜欢使用http://host/static/images作为您提供静态图片的网址。这样,它遵循Django文档Managing static files,它建议为您使用静态文件的前缀。否则,你有多个文件夹用于混淆项目和应用程序文件夹的不同静态内容。

1

检查使用“root”或“alias”之间的差异。 基本上在使用'root'的情况下,'location'(/ static /)旁边的路径会被追加到路径中,而'alias'则会被忽略。