当谈到用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文档管理静态文件,该文档建议为静态文件使用前缀。否则,您的项目和应用程序文件夹中会有多个不同静态内容的文件夹。